#python #arrays #delimiter
#python #массивы #разделитель
Вопрос:
Я хотел бы импортировать файл, а затем использовать два разделителя для загрузки их в два массива. Я хотел бы открыть 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
Я бы ожидал, что places[0] будет place1, places[1] будет place2 и т.д… И чтобы time[0] было time1, time[1], чтобы было time2 и так далее.
Ответ №1:
Вы можете использовать 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()
, создается диспетчер контекста и гарантируется, что файл будет закрыт, когда вы закончите его использовать.