2016-07-14 3 views
1

私は.csvファイルに変換する必要がある2000以上の.txtファイルしかありません。それぞれが順番にラベル付けされます(例:nstar0001.txt、nstar0002.txtなど)。私は複数の場所で回答を探しましたが、解決策はPython2.x用であるか、古いライブラリを使用することがよくあります。各スターファイルには、csv形式に変換するときにラベルを付ける7列のデータがあります。複数のテキストファイルをPython3で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' 

を取得します。

+0

'izip'はPython-2.xです。 Python-3.xでは 'zip'を使います。このSOの投稿は、http://stackoverflow.com/questions/32659552/izip-not-working-in-python-3-xまたはgithub https://github.com/nschloe/matplotlib2tikz/から試す​​ことができます。 issues/20 – alvits

答えて

0

パンダを使用できます。このようなものはうまくいくはずです:

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) 
+0

forループを使用すると、nstar0000.txtを検索するスクリプトが開始されますが、データはnstar0001.txtから開始されます。それをどのようにしてより高いものから始めることができますか? [編集] whileループでそれを得ました。助けてくれてありがとう!魅力のように働く。 – Justin

+0

範囲はまた開始値をとります:range(1、N)はあなたが望むことをします。 –

+0

whileループを使用する利点は何ですか? – Justin

関連する問題