Как преобразовать UUID Python в строку?

Мне нужно иметь возможность назначить UUID пользователю и задокументировать это в файле .txt. Это все, что у меня есть:

import uuid

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

Я старался:

f.write(uuid.uuid1())

но ничего не приходит, может быть логическая ошибка, но я не знаю.


person Alphin Philip    schedule 05.05.2016    source источник
comment
У вас была возможность ознакомиться с документацией uuid?   -  person Ignacio Vazquez-Abrams    schedule 05.05.2016
comment
@ IgnacioVazquez-Abrams Я новичок в python, и мне очень жаль, но я не совсем понимаю, что вы имеете в виду.   -  person Alphin Philip    schedule 05.05.2016
comment
Вы можете изменить uuid на строку, поставив вокруг нее str(...), если это действительно то, о чем вы просите.   -  person khelwood    schedule 05.05.2016
comment
потому что ввод осуществляется через main.. считается переменной... попробуйте использовать кавычки при повторном вводе... а также f=open(file.txt) не с точкой   -  person Eliethesaiyan    schedule 05.05.2016
comment
Как насчет uuid.uuid4().hex? Он возвращает 32-символьную строку.   -  person Greg    schedule 09.02.2019


Ответы (5)


вы можете попробовать это!

 a = uuid.uuid1()
 str(a)
 --> '448096f0-12b4-11e6-88f1-180373e5e84a'
person sumit    schedule 05.05.2016
comment
кто минусовал это? Вопрос в том, как изменить UUID на строку? и это отлично отвечает на вопрос. Он ничего не вернет, потому что показывает, как преобразовать UUID в строковое представление. Голосование +1 - person Felipe; 20.09.2017
comment
Будет ли str(UUID) всегда возвращать строку, состоящую из буквенно-цифровых символов и дефисов? Мне не удалось найти документы по UUID.__str__(). Или мне нужно будет использовать что-то вроде UUID.hex() или UUID.urn(), чтобы убедиться, что в результирующей строке нет непечатаемых символов? - person Adam Mlodzinski; 26.03.2020
comment
@AdamMlodzinski Да, из официальной документации по Python docs.python.org/3/ library/uuid.html#module-uuid, а также проверьте исходный код метода str github.com/python/cpython/blob/master/Lib/uuid.py#L279 - person sumit; 05.01.2021

Вы также можете сделать это. Удаляет черточки в качестве бонуса. ссылка на документы.

import uuid
my_id = uuid.uuid4().hex

ffba27447d8e4285b7bdb4a6ec76db5c

ОБНОВЛЕНИЕ: усеченные UUID (без тире) функционально идентичны полным UUIDS (обсуждение). Дефисы в полных UUID всегда находятся в одной и той же позиции (статья).

person andyw    schedule 09.06.2020
comment
спасибо, сэр, у вас есть ссылка на документы? - person Rohan Devaki; 08.05.2021
comment
и будет ли это по-прежнему уникальным? если убрать тире? - person Rohan Devaki; 08.05.2021
comment
я отредактировал свой ответ, чтобы сделать ссылку на документы более очевидной. - person andyw; 08.05.2021
comment
обновил мой ответ относительно влияния удаления тире. - person andyw; 08.05.2021

Я придумал другое решение, которое сработало, как и ожидалось, с Python 3.7.

import uuid

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

urn – это UUID в виде URN, как указано в RFC 4122.

person abdullahselek    schedule 05.09.2019

Вероятно, это потому, что вы на самом деле не закрываете свой файл. Это может вызвать проблемы. Вы хотите использовать блок context manager/with при работе с файлами, если у вас действительно нет причин не делать этого.

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)

Это автоматически закроет ваш файл, когда вы закончите, что гарантирует его запись на диск.

person Wayne Werner    schedule 05.05.2016
comment
Я пробовал это, и он продолжает возвращаться как: TypeError: аргумент write() должен быть str, а не UUID# - person Alphin Philip; 08.05.2016
comment
@AlphinPhilip обновил мой ответ - вы можете сделать любой из них. Последнее предполагает, что вы используете python3.x+ или запустили from __future__ import print_function - person Wayne Werner; 08.05.2016

[обновление] я добавил функцию str, чтобы записать ее в виде строки и закрыть файл, чтобы убедиться, что он делает это немедленно, прежде чем мне пришлось завершить программу, чтобы содержимое было записано

 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()

Я думаю, это работает для меня

person Eliethesaiyan    schedule 05.05.2016
comment
Я пробовал это, и он продолжает возвращаться как: TypeError: аргумент write() должен быть str, а не UUID - person Alphin Philip; 08.05.2016
comment
@AlphinPhilip, я надеюсь, ты исправишь это к тому времени. - person Eliethesaiyan; 12.05.2016
comment
Не уверен, имеет ли это значение для вас, но мне кажется, что uuid1, который вы печатаете, не совпадает с тем, который вы записываете в файл, потому что uuid.uuid1() != uuid.uuid1() - person djvg; 17.01.2018
comment
@ Деннис, я предлагал альтернативы ... либо он может распечатать их, либо сгенерировать в строковой переменной и записать ... или сгенерировать и записать напрямую - person Eliethesaiyan; 18.01.2018