Python - 如何读取/解析类似CSV的行?
我查了一些资料,但大多数回答都是关于如何读取完整的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)