同じディレクトリにあるユーザー指定の 2 列の csv ファイルを読み取り、データに対していくつかの計算を行い、別のユーザー定義の csv ファイルである stdout に結果を出力するスクリプトがあります。私は 2.7.5 で作成しましたが、ようやく 3.2 に移行したばかりで、動作しません。私が知っているショックではありませんが、私はプログラミングにかなりの経験がなく、Python 3 で動作させる方法を理解するのに苦労しています.
以前は機能していた基本的な読み取り要素と印刷要素にコードを戻しましたが、より明白な変更をいくつか行ったにもかかわらず、3.2 ではまだ機能しません。2to3.py を使用してみましたが、不正な入力 parseerror が発生し、何も変更されません! とにかく、なぜ今それが機能しないのかを正確に学びたいと思います。
私が望むコマンドのタイプは次のとおりです。
somedirectory>myscript inputdata.csv > outputdata.csv
これは、私が何をしているのかを見ることができるように機能した Python 2.7.5 スクリプトの簡素化されたバージョンです (すべてのインポートを残しています)。
import fileinput, math, sys, numpy as np
from numpy import linspace, loadtxt, ones, convolve
from optparse import OptionParser
def main():
parser = OptionParser()
options,args = parser.parse_args()
try:
data = [(line.rstrip()).split(',') for line in fileinput.input(args)]
except IOError as detail:
print >> sys.stderr, detail
sys.exit(2)
'''kept these lines in just to make sure the data is in the same format as when it worked before'''
t = [float(row[0]) for row in data]
m = [float(row[1]) for row in data]
result = [[a,b] for a,b in zip(t, m)]
for line in result:
print >> sys.stdout, str(line[0]) + ',' + str(line[1])
options = 0
if __name__ == "__main__":
main()
明らかに Print は関数になりました。廃止された Optparse は Argparse などに変換できます。
こんな感じでいいと思っていたので、
import fileinput, math, sys, inspect, numpy as np
from numpy import linspace, loadtxt, ones, convolve
from argparse import ArgumentParser
def main():
parser = ArgumentParser()
options,args = parser.parse_args()
try:
data = [(line.rstrip()).split(',') for line in fileinput.input(args)]
except IOError as detail:
print(detail, file=sys.stderr)
sys.exit(2)
'''kept these lines in just to make sure the data is in the same format as when it worked before'''
t = [float(row[0]) for row in data]
m = [float(row[1]) for row in data]
result = [[a,b] for a,b in zip(t, m)]
for line in result:
print(str(line[0]) + ',' + str(line[1]), file=sys.stdout)
options = 0
if __name__ == "__main__":
main()
これにはおそらくいくつかの明白な問題がありますが、すべての要素を調査した後、正確に壊れている場所に行き詰まっています.
さらに、このタイプのcsvファイルの読み取りと書き込みを行うためのより良い方法がおそらくあります. たとえばcsvモジュールについては知っていますが、必要な方法など、コマンドラインからユーザー指定のファイルでそれを使用する例を見つけることができません。見つけることができるすべての例は、スクリプト自体で開くファイルを定義しています。
前もって感謝します。