6

私はいくつかの検索を行いましたが、ほとんどの答えは完全なcsvファイルの読み取りに関するものであり、これらのどれも私が直面している問題のようなものではありません.

urllib2 を使用してネットからファイルを読み込もうとしています:

request = urllib2.Request('http://.../tv.txt')
response = urllib2.urlopen(request)
lines = response.readlines()
for line in lines:
    ...

「行」形式は次のようになります。

"ABC", "XYZ,MNO", "KLM"
"ABC", "MN"
"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"

上記のように、これらの行は実際には CSV 行ではありません。列の数は変化し続けます。

各行をリストに分割する方法はありますか? 欲望の結果は次のようになります。

["ABC", "XYZ,MNO", "KLM"]
["ABC", "MN"]
["ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"]

line.split(",") を使用してみましたが、二重引用符の各ペア内にコンマがあるため、正しく分割できません。

方法を知っている場合は、私を助けてください。どうもありがとうございました。

乾杯、

PHP-Python-Java-MySQL-初心者。

4

2 に答える 2

8

csv モジュールを使用すると、必要なことが行われます。

yourstring= '"ABC", "XYZ,MNO", "KLM"\n"ABC", "MN"\n"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"'

import csv
import io

class MyDialect(csv.Dialect):
    strict = True
    skipinitialspace = True
    quoting = csv.QUOTE_ALL
    delimiter = ','
    quotechar = '"'
    lineterminator = '\n'


b = io.StringIO(yourstring)
r = csv.reader(b, MyDialect())

for i in r:
    print len(i), ':',' @ '.join(i)
于 2013-02-21T10:12:39.783 に答える
0
import csv
import io

input='''"ABC", "XYZ,MNO", "KLM"
"ABC", "MN"
"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"'''

resader = csv.reader(
    io.StringIO(input), 
    delimiter = ',', 
    quotechar = '"', 
    skipinitialspace = True,
)
for row in resader:
    print(row)

次のようになります

['ABC', 'XYZ,MNO', 'KLM']
['ABC', 'MN']
['ABC', '123', '10', 'OPPA GANGNAM STYLE', 'LADY']
于 2019-01-31T10:29:41.990 に答える