Ответ 1
Вам нужно разбить строку на список значений с помощью split()
Итак,
lines = text_file.read().split(',')
Я пытаюсь прочитать строки текстового файла в списке или массиве в 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()
Итак,
lines = text_file.read().split(',')
Метод python file.readLines() возвращает список строк в файле:
f = open('file_name.ext', 'r')
x = f.readlines()
f.close()
Теперь вы должны иметь возможность перебирать массив строк x.
Если вы хотите использовать файл и не забыть закрыть его потом, сделайте следующее:
with open('file_name.ext', 'r') as f:
x = f.readlines()
Вы также можете использовать numpy loadtxt, например
from numpy import loadtxt
lines = loadtxt("filename.dat", comments="#", delimiter=",", unpack=False)
Итак, вы хотите создать список списков... Нам нужно начать с пустого списка
list_of_lists = []
Далее, мы читаем содержимое файла, строка за строкой
with open('data') as f:
for line in f:
inner_list = [elt.strip() for elt in line.split(',')]
# in alternative, if you need to use the file content as numbers
# inner_list = [int(elt.strip()) for elt in line.split(',')]
list_of_lists.append(inner_list)
Общим вариантом использования является использование столбчатых данных, но нашими единицами хранения являются строки файла, которые мы читаем один за другим, поэтому вы можете захотеть перенести ваш список списков. Это можно сделать с помощью следующей идиомы
by_cols = zip(*list_of_lists)
Другим распространенным явлением является присвоение имени каждому столбцу
col_names = ('apples sold', 'pears sold', 'apples revenue', 'pears revenue')
by_names = {}
for i, col_name in enumerate(col_names):
by_names[col_name] = by_cols[i]
чтобы вы могли работать с однородными элементами данных
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
Большая часть написанного мною может быть ускорена с использованием модуля csv
из стандартной библиотеки. Другим сторонним модулем является pandas
, который позволяет автоматизировать большинство аспектов типичного анализа данных (но имеет ряд зависимостей).
Обновление Пока в Python 2 zip(*list_of_lists)
возвращает другой (транспонированный) список списков, в Python 3 ситуация изменилась и zip(*list_of_lists)
возвращает zip-объект, который не подлежит расшифровке.
Если вам нужен индексный доступ, вы можете использовать
by_cols = list(zip(*list_of_lists))
который дает вам список списков в обеих версиях Python.
С другой стороны, если вам не нужен индексированный доступ и что вы хотите, просто для создания словаря, индексированного по именам столбцов, zip-объект просто отлично...
file = open('some_data.csv')
names = get_names(next(file))
columns = zip(*((x.strip() for x in line.split(',')) for line in file)))
d = {}
for name, column in zip(names, columns): d[name] = column
Этот вопрос задает вопрос о том, как прочитать содержимое значения через запятую из файла в итерируемый список:
0,0,200,0,53,1,0,255,...,0.
Самый простой способ сделать это с помощью модуля csv
:
import csv
with open('filename.dat', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
Теперь вы можете легко перебирать spamreader
следующим образом:
for row in spamreader:
print(', '.join(row))
Смотрите документацию для большего количества примеров.
with open('D:\python\positive.txt', 'r') as myfile: data=myfile.read().replace('\n', '')
Если ваш файл содержит числовые значения, то loadtxt
метод numpy loadtxt
. Вы можете прочитать массив следующим образом:
import numpy as np
filename = '../data/NLPR_MCT/db3/cam1.dat'
x = np.loadtxt(filename, delimiter=',')
print (x)
Вы можете индексировать значения как массив в x, а file.readlines() неудобно, потому что он вставляет '\n' в каждую строку, и индексация может стать ошибочной.