2016-04-04 3 views
-1

私はこれを書くより効率的な方法を見つけることができるかどうかを検討しています。 csvリーダーの問題は、出力を標準出力に書き出すときに、その出力の周りに別の単一引用符を追加することです。引用符をnoneに変更すると、書式設定が保持されなかったため役に立たなかった。コードをクリーンアップするか、このコードの一部を書くより効率的な方法を見つけることができます。

このコードは機能しますが、私はより効率的に行うことができると感じています。私はPythonとプログラミングには本当に新しいです。

import csv 
import sys 

def printString(x): 
    print x[0] + ",", x[1] + ",", x[2] + ",", x[3] + "," 

with open(sys.argv[1],"rb") as inputFile: 
    csvInput = csv.reader(inputFile, delimiter=',') 
    header = next(csvInput) 
    sort = sorted(csvInput, key=lambda x:float(x[3])) 

printString(header) 
for i in sort: 
    printString(i) 
+0

['csv.writer'](https://docs.python.org/2/library/csv.html#csv.writer)が表示されましたか? – user2357112

+0

私は、ファイルに書き込むのではなく標準出力に書き込む方法を見つけられなかったのですか? –

答えて

0

私はstring.join関数を見ています。セパレータ(この場合はコンマ)として使用する文字列を.joinで呼び出してから、この場合の値(、あなたのcsvreaderからの値

>>> x = ['1.0', '2.0', '3.0'] 
>>> ','.join(x) 
1.0,2.0,3.0 

警告 - 。参加は可能性があるだけに、文字列(ように配列の値を必要とするので、あなたはint型への変換をやってみたかった場合は/あなたを処理するために浮かびますここに提供されている他のオプションを見たいと思っています

1

この方法を使用します。

def printString(x): 
    for field in x: 
     print "{0},".format(field) 
+1

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – MattDMo

+0

ビットを明確にする。私は必要に応じて出力を別のファイルに送信し、適切なcsvファイルを持っていたいと思います。例:./csvsort.py csvFile.csv> newCsvFile.csv –

1

読むUnderstanding repr() function in Python、それはあなたの "CSV出力" に適用されます。csv.readerは行として文字列のリストを生成します。前の例を使用

from __future__ import print_function 

for row in sort: 
    print(*row, sep=", ") 

は関数として
>>> print ["f1", "f2", "f3", "f4"] 
['f1', 'f2', 'f3', 'f4'] 

印刷が、この場合に便利になるでしょう:

printの文にあるようリストを渡すと、それはその repr表現を出力します
>>> print(*["f1", "f2", "f3", "f4"], sep=", ") 
f1, f2, f3, f4 

この文脈では、アスタリスクはunpacks the list as positional argumentsです。

0

あなたのお手伝いをしてくれてありがとう、私は一緒に行くことを決めました。

import csv 
import sys 

try: 
    with open(sys.argv[1],"rb") as inputFile: 
     csvInput = csv.reader(inputFile, delimiter=',') 
     header = next(csvInput) 
     sort = sorted(csvInput, key=lambda x:float(x[3])) 
    print(','.join(header)) 
    for i in sort: 
     print(','.join(i)) 

except: 
    print("Please input a csv file to sort, example: './dataSort.py csvFile.csv'" + \ 
       " the 4th column of the csv file needs to be a float or int variable.") 
関連する問題