如何使用换行分隔符在python上读取csv @

Mar*_*elo 4 python csv

我需要在Python上读取csv,我拥有的文本文件具有以下结构:

"114555","CM13","0004","0","C/U"@"99172","CM13","0001","0","C/U"@"178672","CM13","0001","0","C/U"
Run Code Online (Sandbox Code Playgroud)

范围:,

新队: @

我的代码到目前为止:

import csv
data = []
with open('stock.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', lineterminator='@')
    for row in reader:
        data.append({'MATERIAL':  row[0],'CENTRO': row[1], 'ALMACEN': row[2], 'STOCK_VALORIZADO' : row[3], 'STOCK_UMB':row[4]})


print(data)  #this print just one row
Run Code Online (Sandbox Code Playgroud)

此代码只打印一行,因为它不能将@识别为换行符,并使用引号打印它:

[{'MATERIAL': '114555', 'CENTRO': 'CM13', 'ALMACEN': '0004', 'STOCK_VALORIZADO': '0', 'STOCK_UMB': 'C/U@"99172"'}]
Run Code Online (Sandbox Code Playgroud)

Gio*_*Gio 9

根据https://docs.python.org/2/library/csv.html: "读者硬编码识别'\ r'或'\n'作为行尾,并忽略lineterminator.这种行为将来可能会改变." 因此,现在提供论证是lineterminator='@'行不通的.

我认为最好的选择是将整个文件读入变量,并替换所有'@'字符,您可以按如下方式执行此操作:

with open("stock.csv", "r") as myfile:
    data = myfile.read().replace('@', '\n')
Run Code Online (Sandbox Code Playgroud)

现在你需要根据python doc 调整你的算法,你可以将变量传递datacsv.reader(而不是文件stock.csv):

" "iterable"参数可以是为每次迭代返回一行输入的任何对象,例如文件对象或列表.[...] "

因此,您可以传递data.splitlines()给csv.reader.

  • 希望没有一个字段包含''@',否则问题就会变得棘手. (2认同)