Python - 如何读取/解析类似CSV的行?

6 投票
2 回答
11641 浏览
提问于 2025-04-17 16:36

我查了一些资料,但大多数回答都是关于如何读取完整的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新手。

2 个回答

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']
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)

撰写回答