Цикл по столбцам в Python и запись вывода для каждого столбца в файле

В моем наборе данных 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. Починить не удалось. Это кажется довольно стандартным, и извините, если я перезаписываю этот вопрос существующими.

Не могли бы вы немного уточнить, хотите ли вы хранить значения каждого столбца в определенном файле, например, для столбца 1, вы хотите сохранить их в file1.dat?

Rishikesh Jha 05.07.2018 10:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
48
2

Ответы 2

Похоже нужен 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])

Другие вопросы по теме