2016-12-18 1 views
0

私は10個のCSVファイルをpythonで作成しました。各CSVファイルには約330Kライン(行)を有し、各列は次のようになりますいくつかのcsvファイルを特定の基準でPythonを使ってマージする

0.334,0.0232,0.00086,1.642e-05

[空白行]

0.334,0.0232,0.00086,1.742電子05

[空白行]

...

(Pythonは、各行の後に空白行に書いて、なぜ私はわかりません)。

Parameters1、Parameters2 ....という名前の10個のファイルをマージしようとしています。パラメータ10は、空白の行を除外し、2番目の列に0.1より大きい値が含まれている場合にのみ書き込みます。

fout = open("C:\Anaconda3\Sr90NHPModelParameters\Parameters100.csv","a") 
for num in range(1,11): 
    for line in open("C:\Anaconda3\Sr90NHPModelParameters\Parameters"+str(num)+".csv"): 
     if line[0]!="": 
      if line[1]>0.1: 
       fout.write(line) 
      else: 
       pass 
     else: 
      pass 
fout.close() 

上記のコードを実行すると、str()> float()のような順序付け不可能な型が発生します。

と私が代わりに私がとValueErrorを得る

if float(line[1])>0.1: 

​​

を変更することで、同じコードを実行した場合:float型に文字列を変換できませんでした: ''

私はそれがなぜ、わからないのですか?私は持っています '。'それは数の一部であり、例えば、0.334または1.642e-05である。

ありがとうございました!

+1

行の2番目の*文字はピリオドです。あなたはそれをフィールドに分割していません。あなたがCSVを使っているなら、なぜ 'csv'を使わないのでしょうか? – jonrsharpe

+0

@jonrsharpe、私はまだPythonの学習段階にあります。文字の代わりにフィールドに分割する方法を明確にしてください。ご協力いただきありがとうございます。 – DPdl

+0

それからgoogle "Python CSV"と読んで始めてください!上記で言及した組み込みモジュールは、賢明な出発点になります。 – jonrsharpe

答えて

0

csvモジュールでコードをリファクタリングできるようになるまで、実際にlistを使用していることを確認する条件の前に、line = line.strip().split(",")をスクリプトに追加してみてください。以下は、まあまあのイラストを構成するはずです:

with open("C:\Anaconda3\Sr90NHPModelParameters\Parameters100.csv","a") as fout: 
    for num in range(1,11): 
     for line in open("C:\Anaconda3\Sr90NHPModelParameters\Parameters"+str(num)+".csv"): 
      line = line.strip().split(",") 
      if line[0] == '' or float(line[1]) < 0.1: 
       continue 
      else: 
       fout.write(",".join(line)+"\n") 

これは今のところ助けてください。

関連する問題