чтение в текстовом файле чисел в список без одинарных кавычек Python

#python #list #text-files

#python #Список #текстовые файлы

Вопрос:

Когда я читаю в текстовом файле чисел:

 1, 2, 3, 4, 5, 6, 7, 8
  

Список создается как:

 dTags = ['1, 2, 3, 4, 5, 6, 7, 8']
  

Я не хочу, чтобы одинарные кавычки были в начале и в конце списка, поэтому я просто хочу, чтобы это было похоже:

 dTags = [1, 2, 3, 4, 5, 6, 7, 8]
  

Это код, который я использую:

 dTags = []
with open("tagNumbersToTest.txt") as file:
    for line in file: 
        line = line.strip() #or some other preprocessing
        dTags.append(line) #storing everything in memory!

#print(dTags)
  

Как я могу этого добиться?

Ответ №1:

Если у вас есть строка:

 line = "1, 2, 3, 4, 5, 6, 7, 8"
  

вы можете добавить список целых чисел, используя:

 dTags.append([int(x) for x in line.split(",")])
  

Это добавит список, такой как:

 [1, 2, 3, 4, 5, 6, 7, 8]
  

Тогда у dTags вас будет список списков. Если вместо этого вы хотите, чтобы все строки были объединены в один список, а не в список списков, тогда используйте extend вместо append .

Ответ №2:

В вашем случае это добавление одного элемента в список. Желаемый результат содержит 5 элементов. Одна вещь, которую вы можете попробовать, это —

 dTags = []
with open("tagNumbersToTest.txt") as file:
    for line in file: 
        dTags.extend(line.split(','))
  

Вывод —

 ['1', ' 2', ' 3', ' 4', ' 5']
  

Чтобы получить все целочисленные значения вместо строки, вы можете добавить строку ниже при условии, что все элементы имеют тип данных int.

 dTags_list = [int(i) for i in dTags]
  

Вывод —

 [1, 2, 3, 4, 5]
  

Чтобы обобщить ваш код —

     dTags = []
    with open("tagNumbersToTest.txt") as file:
        for line in file: 
            dTags.extend([int(i) for i in line.split(',')])
  

Ответ №3:

Попробуйте
(при условии, что в вашем файле 1 строка текста)

 with open('data.txt') as f:
  nums = [int(x) for x in f.readline().strip().split(',')]
  print(nums)
  

Ответ №4:

Если вы хотите преобразовать строку в код Python, вы можете использовать eval(list(line)) , даже если я не рекомендую это по соображениям безопасности.

 dTags = []
with open("tagNumbersToTest.txt") as file:
    for line in file: 
        line = line.strip()
        dTags.append(list(eval(line)))
  

dTags это будет список списков, но затем вы можете манипулировать им или изменять текстовый файл, чтобы получить желаемый результат.

https://docs.python.org/3/library/functions.html#eval

Комментарии:

1. удалось заставить его работать, используя другой ответ, спасибо, хотя