Эта проблема: Мне предоставляется файл .dat с 3 столбцами из 100 данных (идентификационный номер, вес объекта, стоимость объекта), которые разделены некоторыми пробелами/вкладками (см. ниже). Для целей моего задания в классе по марковским моделям я просто переписал все эти данные в массив 3x100 для использования в своих симуляциях. Однако, если бы список был длиннее, я бы не смог выполнить этот шаг вручную, поэтому я хотел бы научиться правильно читать в каждой строке файла .dat так, чтобы каждое из значений данных помещалось в (100x3) 2-мерная матрица/список под названием «данные». Повторюсь, это нигде не связано с домашним заданием, я просто хочу понять, как лучше всего эффективно вводить такой гипотетически большой файл данных с помощью python 3.
Ниже приведены первые восемь строк входного файла .dat. Форматирование опубликовано иначе, чем оно выглядит при копировании в поле вопроса, но я не хочу редактировать его ради форматирования, если это имеет отношение к проблеме.
%%id weight (metric tons) value (1000 USD)
1 45220 28312
2 38764 22635
3 24801 21689
4 4507 22864
5 57671 12037
6 64263 15571
7 59482 1618
Прочитав другие ответы, касающиеся синтаксического анализа в python, я считаю, что мне следует начать со структуры, аналогичной той, что у меня есть ниже.
with open('Packing.dat') as f:
for line in f:
for i in range(len(line)):
#functionThatMovesDownLineAndDistributesData(char)
Что я хотел бы узнать, как это сделать, так это анализировать каждую из строк данных, игнорировать все пробелы между данными и распределять три типа данных в 2-мерный массив, чтобы использовать его для последующей обработки.
Большое спасибо всем, кто готов предложить некоторую помощь!
Попробуйте следующее. Я перебираю файл, пропуская первую строку, затем анализирую целые числа и сохраняю их в список. string.split разбивает строку на несколько элементов, учитывая более одного пробела например
line = '1 45220 28312'
print(line.split())
#['1', '45220', '28312']
datas = []
with open('Packing.dat') as f:
#Ignore the first line with column description
next(f)
#Iterate through lines in the file
for line in f:
data = []
#Get all elements in each line in a list
items = line.split()
#Append these elements to a list
for item in items:
data.append(int(item))
#Append the elements list to a bigger list
datas.append(data)
print(datas)
#[[1, 45220, 28312], [2, 38764, 22635], [3, 24801, 21689], [4, 4507, 22864], [5, 57671, 12037], [6, 64263, 15571], [7, 59482, 1618]]
Большое спасибо! Но я не совсем понимаю, что происходит. Разбивает ли items = line.split() строку на каждый из ее отдельных символов? Когда к данным добавляются отдельные значения, где происходит различие между категориями? Читая этот код, я бы подумал, что вывод будет [[14522028312], [23876422635], ...].