Как преобразовать несколько текстовых файлов в формат csv в Python3?

У меня чуть более 2000 файлов .txt, которые мне нужно преобразовать в файлы .csv. Каждый из них последовательно помечен (например, nstar0001.txt, nstar0002.txt и т. д.). Я искал ответы в нескольких местах, но часто решения для Python2.x или используют устаревшие библиотеки. Каждый звездный файл имеет 7 столбцов данных, которые я хочу пометить при преобразовании в формат csv.

Вот моя последняя попытка:

import csv
import os
import itertools


##Convert all nstar####.txt files to csv
stars = int(input("Enter the TOTAL number of stars (including 'bad' stars):"))
k = 1
while k < stars + 1:
    if k < 10:
        q = 'nstar' + '0' + '0' + '0' + str(k) + '.txt'
        r = 'nstar' + '0' + '0' + '0' + str(k) + '.csv'
        with open(q, 'rb') as in_file:
            stripped = (line.strip() for line in in_file)
            lines = (line for line in stripped if line)
            grouped = itertools.izip(*[lines] * 7)
            with open(r, 'wb') as out_file:
                writer = csv.write(out_file)
                writer.writerow(('jd', 'mag', 'merr', 'id', 'cerr', 'serr', 'perr'))
                writer.writerows(grouped)

Это было заимствовано из другого вопроса StackOverflow и немного изменено в соответствии с моими потребностями. Однако при запуске я получаю

AttributeError: module 'itertools' has no attribute 'izip'

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


person Justin    schedule 14.07.2016    source источник
comment
izip находится в Python-2.x. Используйте zip на Python-3.x. Этот пост SO может помочь вам stackoverflow .com/questions/32659552/ или вы можете попробовать это на github github.com/ nschloe/matplotlib2tikz/issues/20   -  person alvits    schedule 15.07.2016


Ответы (1)


Вы можете использовать панд. Что-то вроде этого должно работать:

import pandas as pd

for i in range(5):
    fln = "nstar%04d" % i
    df = pd.read_csv(fln+".txt",delim_whitespace=True, header=None)
    hdr = ['jd', 'mag', 'merr', 'id', 'cerr', 'serr', 'perr']
    df.to_csv(fln+".csv", header=hdr, index=False)
person Sjaak Dalens    schedule 14.07.2016
comment
Использование этого цикла for запускает скрипт, ищущий nstar0000.txt, но мои данные начинаются с nstar0001.txt. Как я могу изменить это, чтобы начать один выше. Изменить Получил это с помощью цикла while. Спасибо за помощь! работает как шарм. - person Justin; 15.07.2016
comment
Range также примет начальное значение: range(1,N) будет делать то, что вы хотите. - person Sjaak Dalens; 15.07.2016
comment
В чем преимущество использования этого цикла while? - person Justin; 16.07.2016
comment
Инициализация, тестирование и увеличение счетчика циклов выполняются в одном понятном операторе. Это упрощает чтение и обслуживание. - person Sjaak Dalens; 16.07.2016