私は、Pythonを使ってCSVファイルの各行に3つのフィールドをマージしようとしています。これは、フィールドの一部が二重引用符で囲まれ、カンマを含むことを除いて、単純なものになります。ここに例があります:Pythonを使用してCSV文字列のフィールドをマージするにはどうすればよいですか?
この形式の各行にフィールド7-9をマージする簡単なアルゴリズムはありますか?すべての行にコンマが二重引用符で囲まれているわけではありません。
ありがとうございました。
私は、Pythonを使ってCSVファイルの各行に3つのフィールドをマージしようとしています。これは、フィールドの一部が二重引用符で囲まれ、カンマを含むことを除いて、単純なものになります。ここに例があります:Pythonを使用してCSV文字列のフィールドをマージするにはどうすればよいですか?
この形式の各行にフィールド7-9をマージする簡単なアルゴリズムはありますか?すべての行にコンマが二重引用符で囲まれているわけではありません。
ありがとうございました。
これは何か?
import csv
source= csv.reader(open("some file","rb"))
dest= csv.writer(open("another file","wb"))
for row in source:
result= row[:6] + [ row[6]+row[7]+row[8] ] + row[9:]
dest.writerow(result)
例
>>> data=''',,Joe,Smith,New Haven,CT,"Moved from Portland, CT",,goo,
... '''.splitlines()
>>> rdr= csv.reader(data)
>>> row= rdr.next()
>>> row
['', '', 'Joe', 'Smith', 'New Haven', 'CT', 'Moved from Portland, CT', '', 'goo', '' ]
>>> row[:6] + [ row[6]+row[7]+row[8] ] + row[9:]
['', '', 'Joe', 'Smith', 'New Haven', 'CT', 'Moved from Portland, CTgoo', '']
Pythonで組み込みモジュールは、CSVファイルを解析するためにあります:
あなたは 'データベース' として、この質問をタグ付けしています。実際には、2つのファイルをdbの別々のテーブルにアップロードする方が簡単でしょう(sqlliteまたはsqlalchemyのようなPythonのSQLライブラリを使用できます)。
これは、SQLの構文を使用してテーブルを照会することができ、メモリに保管するのではなくディスクに格納できるため、考えてみましょう。:)
あなたは、重い物を持ち上げるを行うためにcsvモジュールを使用することができます。http://docs.python.org/library/csv.html
あなたが列をマージしたい正確にどのように言いませんでした。おそらく、あなたの統合フィールドが「Portland、CTgooから移動」されることは望ましくありません。以下のコードでは、区切り文字列(おそらく", "
)を指定し、空白のフィールドを処理します。
[transcript of session]
prompt>type merge.py
import csv
def merge_csv_cols(infile, outfile, startcol, numcols, sep=", "):
reader = csv.reader(open(infile, "rb"))
writer = csv.writer(open(outfile, "wb"))
endcol = startcol + numcols
for row in reader:
merged = sep.join(x for x in row[startcol:endcol] if x.strip())
row[startcol:endcol] = [merged]
writer.writerow(row)
if __name__ == "__main__":
import sys
args = sys.argv[1:6]
args[2:4] = map(int, args[2:4])
merge_csv_cols(*args)
prompt>type input.csv
1,2,3,4,5,6,7,8,9,a,b,c
1,2,3,4,5,6,,,,a,b,c
1,2,3,4,5,6,7,8,,a,b,c
1,2,3,4,5,6,7,,9,a,b,c
prompt>\python26\python merge.py input.csv output.csv 6 3 ", "
prompt>type output.csv
1,2,3,4,5,6,"7, 8, 9",a,b,c
1,2,3,4,5,6,,a,b,c
1,2,3,4,5,6,"7, 8",a,b,c
1,2,3,4,5,6,"7, 9",a,b,c
:リンゴカートを混乱させるために申し訳ありませんが、実際にコードを読むことは、結果が結果的に出力がする...第一及び第三のリストをされるの3つの要素のタプルになることが明らかになりました虚偽である。 –
@ 9upvoters:???? –