当前位置: 首页 > 知识库问答 >
问题:

坏格式csv读取在python

宇文曦
2023-03-14

我收到的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']

或者用CSVDictReader:

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

共有1个答案

斜成济
2023-03-14

最后,我选择以正确的格式重写CSV,然后使用它,在实现的解决方案中,BOM标记在新CSV中被忽略,无论如何,建议我的关于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()
 类似资料:
  • 本文向大家介绍C#读取csv格式文件的方法,包括了C#读取csv格式文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#读取csv格式文件的方法。分享给大家供大家参考。具体实现方法如下: 一、CSV文件规则   1 开头是不留空,以行为单位。 2 可含或不含列名,含列名则居文件第一行。 3 一行数据不跨行,无空行。 4 以半角逗号(即,)作分隔符,列为空也要表达其存在。 5 列内

  • 我在尝试生成一个简单DF的共线性分析时遇到了问题(见下文)。我的问题是,每次尝试运行该函数时,都会检索到以下错误消息: 下面是我正在使用的代码 我试图运行函数的DF如下所示。 我在这里有两个猜测;但不知道如何解决这个问题: -猜测1:np。arrange导致与标头发生某种冲突 -猜想2:问题来自blankseperator,它阻止函数正确地从一列跳转到另一列。问题是,我的CSV文件已经有分隔符(我

  • 我有一个csv,我正试图读入一个对象数组。我一直得到以下错误。。。JAVAutil。输入不匹配异常我认为这是因为它读取的文件是按空格分割的,而不是按逗号分割的。我想我需要用绳子。split()方法,但我不确定具体怎么做。任何建议。这是我到目前为止的代码。。。 以下是我正在使用的文本文件:

  • 我在Azure上有一个Databricks5.3集群,它运行Apache Spark 2.4.0和Scala 2.11。 我不是Java/Scala开发人员,也不熟悉Spark/Databricks。我找不到Spark用来解析值的datetime格式化程序。 我尝试的模式:

  • 这是我在大学的一个项目,一切似乎都很好,除了游戏课,它初始化了游戏。下面是一个片段 之后是一些getter和我要实现的4个方法。这些方法是、、、 我创建了,以便它在此处返回String[]的数组列表: 然后,我想加载一些攻击、敌人和龙,并将它们插入相应的数组列表中。 我在此处应用了: 我这样写它,它接受从返回的ArrayList,并使用开关在ArrayList中的每个String[]中搜索第一个字

  • CSV 格式化 (d3.csv) ? d3.csv - 获取一个CSV (comma-separated values, 冒号分隔值)文件。 ? d3.csv.parse - 将CSV文件字符串转化成object的数组,object的key由第一行决定。如: [{"Year": "1997", "Length": "2.34"}, {"Year": "2000", "Length": "2.38"