109

I need to be able to assign a UUID to a user and document this in a .txt file. This is all I have:

import uuid

a = input("What's your name?")
print(uuid.uuid1())
f.open(#file.txt)

I tried:

f.write(uuid.uuid1())

but nothing comes up, may be a logical error but I don't know.

giuppep
  • 923
  • 1
  • 10
  • 20
Alphin Philip
  • 1,109
  • 2
  • 8
  • 6

6 Answers6

219

you can try this !

 a = uuid.uuid1()
 str(a)
 --> '448096f0-12b4-11e6-88f1-180373e5e84a'
sumit
  • 3,210
  • 1
  • 19
  • 37
  • 12
    who downvoted this? The question is "How do I change a UUID to a string?" and this answers the question just fine. It's not going to return anything because it's showing how to turn a UUID into a string representation. Voting +1 – Felipe Sep 20 '17 at 20:38
  • 2
    Will `str(UUID)` always return a string consisting of alphanumerics-plus-dashes? I couldn't find docs on `UUID.__str__()`. Or, would I need to use something like `UUID.hex()` or `UUID.urn()`, to ensure there are no non-printable characters in the resultant string? – Adam Mlodzinski Mar 26 '20 at 17:53
  • 1
    @AdamMlodzinski Yes, from official python documentation https://docs.python.org/3/library/uuid.html#module-uuid and also check the source code for __str__ method https://github.com/python/cpython/blob/master/Lib/uuid.py#L279 – sumit Jan 05 '21 at 18:19
46

You can also do this. Removes the dashes as a bonus. link to docs.

import uuid
my_id = uuid.uuid4().hex

ffba27447d8e4285b7bdb4a6ec76db5c

UPDATE: trimmed UUIDs (without the dashes) are functionally identical to full UUIDS (discussion). The dashes in full UUIDs are always in the same position (article).

andyw
  • 3,505
  • 2
  • 30
  • 44
4

I came up with a different solution that worked for me as expected with Python 3.7.

import uuid

uid_str = uuid.uuid4().urn
your_id = uid_str[9:]

urn is the UUID as a URN as specified in RFC 4122.

Community
  • 1
  • 1
abdullahselek
  • 7,893
  • 3
  • 50
  • 40
2

[update] i added str function to write it as string and close the file to make sure it does it immediately,before i had to terminate the program so the content would be write

 import uuid
 def main():
     a=input("What's your name?")
     print(uuid.uuid1())
 main()
 f=open("file.txt","w")
 f.write(str(uuid.uuid1()))
 f.close()

I guess this works for me

Eliethesaiyan
  • 2,327
  • 1
  • 22
  • 35
  • I tried this and it keeps coming back as: TypeError: write() argument must be str, not UUID – Alphin Philip May 08 '16 at 10:03
  • @AlphinPhilip i hope you fixed it by then – Eliethesaiyan May 12 '16 at 09:04
  • Not sure if this matters to you, but it seems to me that the uuid1 you are printing is not the same as the one you are writing to file, because `uuid.uuid1() != uuid.uuid1()` – djvg Jan 17 '18 at 13:24
  • @Dennis, i was giving alternatives...either he can print it or generate it in astring variable and write it...or generate it and write it directly – Eliethesaiyan Jan 18 '18 at 02:18
2

It's probably because you're not actually closing your file. This can cause problems. You want to use the context manager/with block when dealing with files, unless you really have a reason not to.

with open('file.txt', 'w') as f:
    # Do either this
    f.write(str(uuid.uuid1()))
    # **OR** this.
    # You can leave out the `end=''` if you want.
    # That was just included so that the two of these
    # commands do the same thing.
    print(uuid.uuid1(), end='', file=f)

This will automatically close your file when you're done, which will ensure that it's written to disk.

Wayne Werner
  • 49,299
  • 29
  • 200
  • 290
  • I tried this and it keeps coming back as: TypeError: write() argument must be str, not UUID# – Alphin Philip May 08 '16 at 10:04
  • @AlphinPhilip updated my answer - you can do either one. The latter assumes that you're running python3.x+ or have run `from __future__ import print_function` – Wayne Werner May 08 '16 at 13:04
0

f-string works as well:

import uuid

str_id = f'{uuid.uuid4()}'
Yaakov Bressler
  • 9,056
  • 2
  • 45
  • 69