В моем наборе данных 7 столбцов. Часть моего скрипта берет столбцы и обрабатывает их. Например, над вторым столбцом работает следующее
for line in f:
input_list.append(float(line.split()[1]))
Я хочу, чтобы он обрабатывал все 7 столбцов и записывал каждый вывод как файл $ columnno.dat.
Вопрос 1: Это правильный способ?
mylist = [1, 2, 3, 4 , 5, 6, 7]
for n in my list:
for line in f:
input_list.append(float(line.split()[n]))
вопрос 2: Теперь вывод - это просто список чисел.
print(*closed, sep='\n')
Но мне нужен вывод для каждого столбца в виде файла, такого как file1.dat (1 is the same syntax of the column no.), file2.dat и т. д. Это команда %f. Починить не удалось. Это кажется довольно стандартным, и извините, если я перезаписываю этот вопрос существующими.






Похоже нужен list.extend
Бывший:
for line in f:
input_list.extend( map(float, line.split()) )
map для преобразования каждого элемента в списке в число с плавающей запятойВопрос 1
Ваше решение не сработает, потому что вы не можете повторять одну и ту же строку дважды, если только вы не используете seek(0) (см. Документы: Методы файловых объектов), чтобы начать заново с первой строки. Вместо этого вы можете перебирать каждую строку и создавать список списков, каждый из которых представляет собой строку в вашем файле.
Модуль csv упрощает синтаксис, поэтому вам не нужно вручную выполнять итерацию, разбивать строки или преобразовывать в float. csv.reader может эффективно справиться с ними:
from io import StringIO
import csv
mystr = StringIO("""34.12 42.13 4.1 65.13 -42.314 54.1 45.32
0.35 65.13 76.13 17.1 -45.1 65.1 78.1""")
# replace mystr with open('file.txt', 'r')
with mystr as fin:
reader = csv.reader(fin, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
L = list(reader)
print(L)
[[34.12, 42.13, 4.1, 65.13, -42.314, 54.1, 45.32],
[0.35, 65.13, 76.13, 17.1, -45.1, 65.1, 78.1]]
вопрос 2
Вы можете перебирать каждый индекс вашего списка списков через zip. Затем в цикле перебирайте значения в столбце. На выходе будет 7 файлов, каждый со столбцом из исходного входного файла. Вот пример:
for idx, column in enumerate(zip(*L), 1):
with open(r'c:\temp\out_{0}.csv'.format(idx), 'w', newline='') as myfile:
writer = csv.writer(myfile)
for val in column:
writer.writerow([val])
Не могли бы вы немного уточнить, хотите ли вы хранить значения каждого столбца в определенном файле, например, для столбца 1, вы хотите сохранить их в file1.dat?