首页 文章

在python中读取错误的格式csv

提问于
浏览
1

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

CSV和第一行的 Headers 如下所示:

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

第一个问题是奇怪的字符(可能缺少编码选项?) Headers 也是错误的,并且不能在该格式上使用DictReader,这对于我与CSV有关的编辑非常有用 .

我可以重新编写一个新的CSV, Headers 格式正确,这不是问题,但我不知道如何跳过CSV的前三行!?或者我可以用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

    最后,我选择以正确的格式重写CSV然后我使用它,在实现的解决方案中,新标记中的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()
    

相关问题