0

1 つのファイルから特定の情報を抽出し、それを新しいファイルに書き込む Python コードを作成しました。これを複数のファイルに対して数回繰り返します。コード (以下) でわかるように、2 つの引数があります。最初の引数は新しいファイルの名前で、2 番目の引数は読み取るファイルです。そのため、端末のコマンド ラインは次のようになります "python code.py newfile readfile". 一度に複数のファイルを読み書きできるようにコードを変更したいので、ターミナルのコマンドラインは「python code.py newfile1 readfile1 newfile2 readfile2 newfile3 readfile3」のようになります...など、読み取るファイルごとに、書き込む独自の新しいファイルがあります。

どんな助けでも大歓迎です

これが私のコードです:

import sys
import re

filetowrite = sys.argv[1]
filetoread = sys.argv[2]

newfile = str(filetowrite) + ".txt"

openold = open(filetoread,"r")
opennew = open(newfile,"w")

rline = openold.readlines()

number = int(len(rline))
start = 0

for i in range (len(rline)) :
    if "2theta" in rline[i] :
        start = i

opennew.write ("q" + "\t" + "I" + "\n")
opennew.write ("1/A" + "\t" + "1/cm" + "\n")
opennew.write (str(filetowrite) + "\t" + str(filetowrite) + "\n")

for line in rline[start + 1 : number] :
    words = line.split()
    word1 = (words[1])
    word2 = (words[2])
    opennew.write (word1 + "\t" + word2 + "\n")

openold.close()
opennew.close()
4

1 に答える 1

1

他の人が指摘しているように、実際にすべてのファイルを同時に処理するのではなく、ファイルをループするだけのようです。os.listdir()メソッドを使用して、渡すディレクトリ内のすべてのファイルのリストを取得できます。

import os;
os.listdir("aDirectoryHere")

ループできるリストが返されます。

メソッドのドキュメント:http ://docs.python.org/2/library/os.html#os.listdir


質問の編集後

sys.argvリストをループして、任意の数の引数を探すことができます。

import sys;

for index, arg in enumerate(sys.argv):
    print index, arg;

print "total:", len(sys.argv);

サンプルを考えると、出力ファイル名のすべてのインデックス+2を調べ、そこから+1して、一致する入力ファイル名を取得できます。

少し話題から外れていますが、興味深いことに、FileInputモジュールにも出くわしました。これまで見たことがありませんでしたが、役に立つかもしれません:http: //docs.python.org/2/library/fileinput.html

于 2013-03-05T03:59:26.923 に答える