在python中读取的格式错误的csv

时间:2018-09-12 13:51:28

标签: python python-3.x csv parsing

我收到的CSV文件格式错误(无法控制生成此CSV的应用程序)

CSV的标题和第一行如下:

"Start Time"
"End Time"
"Service"

"255/06:06:54","255/06:54:42","S2 AVAIL"

这是我用来读取csv的代码:

import csv
import os
import sys
rootPath = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..'))
inputFile = open(rootPath + '\\input\\' + sys.argv[1], 'rt')
sys.path.append(rootPath + '\\common')
    for row in csv.reader(inputFile, dialect='excel'):
        if row:
            print(row)

这是我收到的输出:

['"Start Time"']
['End Time']
['Service']
['255/06:06:54', '255/06:54:42', 'S2 AVAIL']

第一个问题是奇怪的字符(可能缺少编码选项吗?)标题也不正确,并且不能在该格式上使用DictReader,这对于我必须使用CSV进行编辑非常有用。

我可以使用正确设置标题的格式重写新的CSV,这不是问题,但是我不知道如何跳过CSV的前3行!还是我可以阅读CSV格式的邮件?

这是我希望通过csv.reader获得的输出:

['Start Time', 'End Time', 'Service']
['255/06:06:54', '255/06:54:42', 'S2 AVAIL']

或使用csv.DictReader:

OrderedDict([('Start Time', '255/06:06:54'), ('End Time', '255/06:54:42'), ('Service', 'S2 AVAIL')])

1 个答案:

答案 0 :(得分:0)

最后,我选择以正确的格式重写CSV,然后使用它,在实施的解决方案中,新CSV中的BOM标记也被忽略,无论如何,向我建议的关于BOM的链接都包含针对该BOM的修复程序这个问题!

这里是我的解决方案实现的代码:

import csv
import os
import sys
rootPath = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..'))
sys.path.append(rootPath + '\\common')
from function import *

inputFile = open(rootPath + '\\input\\' + sys.argv[1], 'r')
outputFile = open(rootPath + '\\input\\formatted.csv', 'w', newline='')
writeFile = csv.writer(outputFile)
writeFile.writerow(['StartTime','EndTime','Service'])
for row in csv.reader(inputFile.readlines()[3:], dialect='excel'):
    if row:
        writeFile.writerow(row)
inputFile.close()
outputFile.close()