#python #csv #txt
Вопрос:
Когда я использую:
with open("test.txt") as file
read = csv.reader(file)
for i in read:
print(i)
и у меня есть что-то вроде этого:
['[0', ' 0', ' 1', ' 0]']
и мне нужно:
[0, 0, 1, 0]
Какие-нибудь советы, пожалуйста?
Комментарии:
1. Используйте int() для приведения к целому числу. Используйте replace (), чтобы удалить» []»
2. Похоже, ваш файл не является файлом CSV. Можете ли вы поделиться образцом контента, который у него есть?
3. Это проблема XY . Это не CSV-файл. В файле были списки Python, записанные в него в виде строк. Исправьте файл, чтобы записать истинный CSV, или используйте ast.literal_eval для преобразования строки обратно в список Python.
4. Спасибо за помощь! Но я уже решаю свою проблему, принимая во внимание ответы ниже.
5. Тем не менее, они не были бы оптимальными ответами, если бы вы подробнее рассказали о своем контексте. Действительно ли файл является файлом CSV? Или это JSON? Или все-таки что-то другое?
Ответ №1:
ad = ['[0', ' 0', ' 1', ' 0]']
for i in range(len(ad)):
ad[i] = int(ad[i].replace("[", "").replace("]", ""))
print ad
[0, 0, 1, 0]
Комментарии:
1. Спасибо за помощь! Но я уже решаю свою проблему, принимая во внимание все ответы. @Рагу Рам
Ответ №2:
Обычно самым простым решением было бы понимание списка, где new = [int(a) for a in old]
. Однако в вашем случае первый и последний элементы вашего списка на самом деле тоже заключены в квадратные скобки.
Вместо этого вам нужно сделать что-то вроде:
new = [int("".join(filter(str.isdigit, a))) for a in old]
Это довольно большой лайнер, так что давайте разберем его.
- Понимание списка повторяет каждый элемент в вашем списке (я назвал его
old
) и называет егоa
- A передается в
filter
команду с функциейstr.isdigit
. Это в основном удаляет любой символ, который не является цифрой. Проблема с этим заключается в том, что он возвращает итератор, а не простое значение. - Чтобы устранить проблему с итератором, я обернул команду фильтра
"".join()
командой для преобразования ее в простое строковое значение. В этой строке будет только номер. - Наконец, мы можем обернуть все это
int
командой, которая преобразует ваше значение в int.
Если вам не нравится однострочный, это также можно сделать таким образом:
new = []
for a in old:
filtered = filter(str.isdigit, a)
num_str = "".join(filtered)
num.append(int(num_str))
Это то же самое, но немного более подробно.
Комментарии:
1. Спасибо за помощь! Но я уже решаю свою проблему, принимая во внимание все ответы. @Акилан Маниваннан
Ответ №3:
def parseToInt(s):
...: return int((s.replace('[', '')).replace(']', ''))
list(map(lambda x: parseToINt(x), a))
Комментарии:
1. Спасибо за помощь! Но я уже решаю свою проблему, принимая во внимание все ответы. @Алекс