Я пытаюсь прочитать строки текстового файла в список или массив в Python. Мне просто нужно иметь возможность индивидуального доступа к любому элементу в списке или массиве после его создания.
Текстовый файл отформатирован следующим образом:
0,0,200,0,53,1,0,255,...,0.
Где ...
выше, там фактический текстовый файл имеет сотни или тысячи элементов.
Я использую следующий код, чтобы попытаться прочитать файл в список:
text_file = open("filename.dat", "r")
lines = text_file.readlines()
print lines
print len(lines)
text_file.close()
Вывод, который я получаю:
['0,0,200,0,53,1,0,255,...,0.']
1
По-видимому, это чтение всего файла в список только из одного элемента, а не из списка отдельных элементов. Что я делаю не так?
Ответы:
Вам придется разделить вашу строку на список значений, используя
split()
Так,
источник
.csv
файл (как упомянуто в OP), например, файл, содержащий буквенные символы 3 по строке (a,b,c
,d,e,f
и т. Д.) И применяете процедуру, описанную выше, что вы получаете такой список:['a', 'b', 'c\nd', 'e', ... ]
(обратите внимание на элемент'c\nd'
). Я хотел бы добавить, что, несмотря на описанную выше проблему, эта процедура объединяет данные из отдельных строк в одном мегаполисе, обычно не то, что мне нужно при обработке файла данных, ориентированного на записи.csv
модуль или другой существующий парсерВы также можете использовать numpy loadtxt как
источник
dtype : data-type
параметр. docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html Панды read_csv очень просты в использовании. Но я не видел способа указать формат для него. Он считывал числа из моего файла, а мне нужна была строка. Спасибо @Thiru за показ loadtxt.Итак, вы хотите создать список списков ... Нам нужно начать с пустого списка
Далее читаем содержимое файла построчно
Распространенным случаем является использование столбчатых данных, но наши единицы хранения - это строки файла, которые мы прочитали одна за другой, поэтому вы можете захотеть перенести свой список списков. Это можно сделать с помощью следующей идиомы
Другое распространенное использование - дать имя каждому столбцу.
так что вы можете работать с однородными элементами данных
Большая часть того, что я написал, может быть ускорена с помощью
csv
модуля из стандартной библиотеки. Другой сторонний модульpandas
позволяет автоматизировать большинство аспектов типичного анализа данных (но имеет ряд зависимостей).Обновление Хотя в Python 2
zip(*list_of_lists)
возвращается другой (транспонированный) список списков, в Python 3 ситуация изменилась иzip(*list_of_lists)
возвращает объект zip, который не является подписным.Если вам нужен индексированный доступ, вы можете использовать
это дает вам список списков в обеих версиях Python.
С другой стороны, если вам не нужен индексированный доступ и вам нужно просто создать словарь, индексированный по именам столбцов, zip-объект - это нормально ...
источник
csv
модуль ...Этот вопрос задает вопрос о том, как прочитать содержимое значения через запятую из файла в итерируемый список:
0,0,200,0,53,1,0,255,...,0.
Самый простой способ сделать это с помощью
csv
модуля следующим образом:Теперь вы можете легко выполнить итерацию
spamreader
следующим образом:Смотрите документацию для большего количества примеров.
источник