0

次のようなカンマ区切りファイル (csv) があるとします。

"name of movie","starring","director","release year"
"dark knight rises","christian bale, anna hathaway","christopher nolan","2012"
"the dark knight","christian bale, heath ledger","christopher nolan","2008"
"The "day" when earth stood still","Michael Rennie,the 'strong' man","robert wise","1951"
"the 'gladiator'","russel "the awesome" crowe","ridley scott","2000"

上記からわかるように、4 行目と 5 行目では、引用符内に引用符があります。出力は次のようになります。

"name of movie","starring","director","release year"
"dark knight rises","christian bale, anna hathaway","christopher nolan","2012"
"the dark knight","christian bale, heath ledger","christopher nolan","2008"
"The day when earth stood still","Michael Rennie,the strong man","robert wise","1951"
"the gladiator","russel the awesome crowe","ridley scott","2000"

csv ファイルでこのような引用符内で発生するそのような引用符 (一重引用符と二重引用符の両方) を取り除く方法。パーサーはそれが引用符で囲まれていることを識別し、それを 1 つのフィールドと見なすため、1 つのフィールド内のコンマは問題ないことに注意してください。これは、csv ファイルを配置して、複数のパーサーにフィードして任意の形式に変換できるようにする前処理ステップにすぎません。Bash、awk、python はすべて動作します。perlはやめてください、私はその言語にうんざりしています:D よろしくお願いします!

4

3 に答える 3

4

どうですか

import csv

def remove_quotes(s):
    return ''.join(c for c in s if c not in ('"', "'"))

with open("fixquote.csv","rb") as infile, open("fixed.csv","wb") as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile, quoting=csv.QUOTE_ALL)
    for line in reader:
        writer.writerow([remove_quotes(elem) for elem in line])

生産する

~/coding$ cat fixed.csv 
"name of movie","starring","director","release year"
"dark knight rises","christian bale, anna hathaway","christopher nolan","2012"
"the dark knight","christian bale, heath ledger","christopher nolan","2008"
"The day when earth stood still","Michael Rennie,the strong man","robert wise","1951"
"the gladiator","russel the awesome crowe","ridley scott","2000"

ところで、これらの名前のいくつかのスペルを確認したい場合があります..

于 2012-08-17T17:58:23.070 に答える
1

awkを使用すると、次のようなことができます。

awk -v Q='"' '{ gsub("[\"']","") ; gsub(",",Q "," Q) ; print Q $0 Q }'
于 2012-08-17T18:08:14.830 に答える
0

値を配列に分割します。最初と最後の文字以外の引用符を削除して、配列を反復処理します。それが役に立てば幸い。

于 2012-08-17T17:52:35.960 に答える