Python 3.x 如何在Python3中将多个文本文件转换为csv格式?

Python 3.x 如何在Python3中将多个文本文件转换为csv格式?,python-3.x,csv,Python 3.x,Csv,我有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(i

我有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)

我知道这个循环只对前几个文件有效,但我只是想在对所有文件运行它之前让它工作。

您可以使用pandas。像这样的方法应该会奏效:

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)

你可以用熊猫。像这样的方法应该会奏效:

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)

izip
在Python-2.x中。在Python-3.x上使用
zip
。这篇文章可能会对您有所帮助,您也可以从github
izip
的Python-2.x中尝试这一点。在Python-3.x上使用
zip
。这篇SO文章可能会对您有所帮助,或者您可以从github尝试使用for循环启动脚本搜索nstar0000.txt,但我的数据从nstar0001.txt开始。我怎样才能改变这一点,从更高的起点开始。用一个while循环得到它。谢谢你的帮助!就像一个符咒。范围也会有一个起始值:范围(1,N)会做你想做的。在一段时间内循环使用它的好处是什么?循环计数器的初始化、测试和递增都在一个清晰的语句中完成。这使得它更易于阅读和维护。使用该for循环将启动脚本搜索nstar0000.txt,但我的数据从nstar0001.txt开始。我怎样才能改变这一点,从更高的起点开始。用一个while循环得到它。谢谢你的帮助!就像一个符咒。范围也会有一个起始值:范围(1,N)会做你想做的。在一段时间内循环使用它的好处是什么?循环计数器的初始化、测试和递增都在一个清晰的语句中完成。这使得它更容易阅读和维护。