猿问

在python中读取的错误格式csv

我收到了格式错误的 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')])


肥皂起泡泡
浏览 166回答 1
1回答

慕姐4208626

最后,我选择以正确的格式重写 CSV,然后使用它,在实现的解决方案中,新 CSV 中也忽略了 BOM 标记,无论如何,向我建议的有关 BOM 的链接包含该问题的修复程序!这里是我的解决方案实现的代码:import csvimport osimport sysrootPath = 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()
随时随地看视频慕课网APP

相关分类

Python
我要回答