Python-如何读取/解析csv类行?

2024-09-24 04:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经做了一些搜索,但大多数的答案是关于阅读一个完整的csv文件,这些都不像我面临的问题。

我正在尝试使用urllib2从网络读取文件:

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

“line”格式如下:

"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新手。


Tags: 文件styleresponserequestlineurllib2linesabc
2条回答

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

相关问题 更多 >