【问题标题】:How to convert multiple text files to csv format in Python3?如何在 Python3 中将多个文本文件转换为 csv 格式?
【发布时间】:2016-11-17 21:38:53
【问题描述】:

我有超过 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'

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

【问题讨论】:

标签: python-3.x csv


【解决方案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)

【讨论】:

  • 使用 for 循环启动脚本搜索 nstar0000.txt,但我的数据从 nstar0001.txt 开始。我怎样才能改变它以开始更高。 Edit 通过 while 循环得到它。谢谢您的帮助!像魅力一样工作。
  • Range 也会取一个起始值:range(1,N) 会做你想做的事。
  • 在 while 循环中使用它有什么好处?
  • 循环计数器的初始化、测试和递增都在一个清晰的语句中完成。这使其更易于阅读和维护。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多