Как преобразовать кортеж, хранящийся в виде строки, обратно в кортеж обратно в строку? - PullRequest
0 голосов
/ 10 июня 2018

Если я сохраню кортеж (1, 2, 3) в текстовом файле в виде строки, как я могу извлечь его из текстового файла и преобразовать обратно в исходный кортеж?

Ответы [ 4 ]

0 голосов
/ 10 июня 2018
if __name__ == "__main__":
    # read it from a file
    with open("filename.txt", "r") as myfile:
        # loop through your text file line by line (if you have multiple of these)
        lines = []
        while True:
            # read a line from text
            line = myfile.readline()
            # add the line to a list
            lines.append(line)
            # if there are no more lines to read, step out of loop
            if not line:
                break
    # create a list of tuples
    list_of_tup = []
    for line in lines:
        # remove next line tag "\n"
        line = line[:-1]
        # use eval() to evaluate a string
        list_of_tup.append(eval(line))
0 голосов
/ 10 июня 2018

Предположим, ваш кортеж находится в MyTuple.txt, тогда вы можете попробовать код ниже, написанный в ReadTuple.py, чтобы прочитать кортеж из файла.

"ReadTuple.py

# Open file in read mode
with open('MyTuple.json', encoding='utf-8') as f:
    content = f.read()
    t = eval(content);

# print tuple t read from file
print(t);

# print type of t
print(type(t));

" MyTuple.txt enter image description here

Наконец, если вы запустите указанный выше код, используя python ReadTuple.pyтогда вы сможете увидеть на экране читаемый кортеж и его тип.

"Output

(1, 2, 3)
<class 'tuple'>
0 голосов
/ 10 июня 2018

Если ваш файл содержит только кортеж, вы можете просто использовать eval.

In [1]: with open('tuple.txt') as f:
   ...:     t = eval(f.read())
   ...:     

In [2]: t
Out[2]: (1, 2, 3)

Обратите внимание, что eval должен не использоваться с ненадежным вводом!Это означает, что не используйте eval для некоторых случайных данных, которые пользователь может ввести или которые ваша программа загрузила из Интернета.

Создание tuple.txt не очень сложно, если t ссылается на кортеж:

In [4]: with open('tuple.txt', 'w') as f:
   ...:     f.write(str(t))
   ...:

В общем хотя я бы посоветовал вамиспользуйте json модуль , когда это возможно .Это довольно общий формат данных, который также легко читается людьми.Последнее полезно для генерации тестовых данных и выявления ошибок.

Если у вас есть табличные данные, тогда sqlite3 может быть хорошим выбором.

0 голосов
/ 10 июня 2018

Может быть, вы могли бы использовать

s="(1, 2, 3)"
tuple(int(x) for x in s.strip('()').split(','))

Удалите '(' и ')' и затем используйте tuple().

Благодаря @ bla для наведениячто s.strip('()') может использоваться вместо s.replace('(').replace(')').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...