Подтвердить что ты не робот

Как прочитать текстовый файл в список или массив с помощью Python

Я пытаюсь прочитать строки текстового файла в списке или массиве в 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

По-видимому, он считывает весь файл в список только одного элемента, а не список отдельных элементов. Что я делаю неправильно?

4b9b3361

Ответ 1

Вам нужно разбить строку на список значений с помощью split()

Итак,

lines = text_file.read().split(',')

Ответ 2

Метод 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()

Ответ 3

Вы также можете использовать numpy loadtxt, например

from numpy import loadtxt
lines = loadtxt("filename.dat", comments="#", delimiter=",", unpack=False)

Ответ 4

Итак, вы хотите создать список списков... Нам нужно начать с пустого списка

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

Ответ 5

Этот вопрос задает вопрос о том, как прочитать содержимое значения через запятую из файла в итерируемый список:

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))

Смотрите документацию для большего количества примеров.

Ответ 6

with open('D:\python\positive.txt', 'r') as myfile: data=myfile.read().replace('\n', '')

Ответ 7

Если ваш файл содержит числовые значения, то 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' в каждую строку, и индексация может стать ошибочной.