#python #python-3.x #csv
#python #python-2.7 #csv
Вопрос:
Проблема: кажется, я не могу проанализировать информацию в текстовом файле, потому что python считывает ее как полную строку, а не отдельные отдельные строки. Пробелы между каждой переменной не являются t, поэтому они не разделяются. Есть ли способ для python гибко удалять пробелы и ставить вместо них запятую или t ?
Пример ДАННЫХ:
MOR125-1 MOR129-1 0.587
MOR125-1 MOR129-3 0.598
MOR129-1 MOR129-3 0.115
Код, который я использую:
with open("Distance_Data_No_Bootstrap_RAW.txt","rb") as f:
reader = csv.reader(f,delimiter="t")
d=list(reader)
for i in range(3):
print d[i]
Вывод:
['MOR125-1 MOR129-1 0.587']
['MOR125-1 MOR129-3 0.598']
['MOR129-1 MOR129-3 0.115']
Желаемый результат:
['MOR125-1', 'MOR129-1', '0.587']
['MOR125-1', 'MOR129-3', '0.598']
['MOR129-1', 'MOR129-3', '0.115']
Комментарии:
1. Измените разделитель на пробел и избавьтесь от лишних пробелов с помощью строкового метода .strip()
2. Если я изменю разделитель на пробел, все одиночные пробелы, существующие в строке, превратятся в запятые. На этом этапе это список со строками и пробелами, разделенными запятыми. Я не уверен, как бы я выполнил .strip() для удаления пробелов, если это не полный список
Ответ №1:
Вы можете просто объявить разделитель пробелом и попросить csv пропустить начальные пробелы после разделителя. Таким образом, ваш разделитель фактически является регулярным выражением ' '
, то есть одним или несколькими пробелами.
rd = csv.reader(fd, delimiter=' ', skipinitialspace=True)
for row in rd:
print row
['MOR125-1', 'MOR129-1', '0.587']
['MOR125-1', 'MOR129-3', '0.598']
['MOR129-1', 'MOR129-3', '0.115']
Ответ №2:
Вы можете указать csv.reader
использовать пробел в качестве разделителя и пропустить все лишние пробелы:
reader = csv.reader(f, delimiter=" ", skipinitialspace=True)
Для получения подробной информации о доступных параметрах проверьте документы Python:
Dialect.delimiter Односимвольная строка, используемая для разделения полей. По умолчанию используется значение ‘,’. Dialect.skipinitialspace При значении True пробел, следующий сразу за разделителем, игнорируется. Значение по умолчанию равно False .