Загрузите файл в массив и разделите его дважды двумя разделителями - PullRequest
2 голосов
/ 22 апреля 2019

Я хотел бы импортировать файл и затем использовать два разделителя, чтобы загрузить их в два массива. Я хотел бы открыть data.txt, который содержит:

place1,time1
place2,time2
place3,time3

...

Я хотел бы, чтобы массив places был местами до, а times - временами после ','

Я могу успешно загрузить файлы с помощью open (), а затем разделить их на массив с line.strip().split('\n')

data = open("data.txt", "r")
infoArray = []
for line in data:
    infoArray.append(line.strip().split('\n'))
data.close()

print infoArray

Я бы ожидал, что места [0] будут местами1, места [1] будут местами2 и т. Д. И для времени [0] будет время1, времени [1] будет время2 и так далее.

1 Ответ

1 голос
/ 22 апреля 2019

Вы можете использовать модуль csv для чтения данных, разделенных запятыми, а также zip() при распаковке итерируемого объекта reader:

>>> import csv
>>> with open("data.txt") as f:
...     reader = csv.reader(f)
...     p, t = zip(*reader)
... 
>>> p
('place1', 'place2', 'place3')
>>> t
('time1', 'time2', 'time3')

Аргументиспользование csv вместо попытки самого анализа файла заключается в том, что он будет иметь дело с такими вещами, как значения в кавычках (в стандартном формате CSV), с которыми вызов str.split(line, ',') не удастся выполнить.

Используете ли выпросто file объект или csv.reader результат, любой из них является итеративным;когда вы перебираете их, вы получаете отдельные строки файла.Вот пример более видимого ввода, где вы можете визуализировать [1, 2] как соответствующий первой строке данных и [3, 4] как второй:

>>> a, b = zip(*[[1, 2], [3, 4]])
>>> a
(1, 3)
>>> b
(2, 4)

Наконец, в этом примере используется with open(),создает менеджер контекста и гарантирует, что файл будет закрыт , когда вы закончите его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...