【问题标题】:Python script to import a comma separated csv that has fixed length fields用于导入具有固定长度字段的逗号分隔 csv 的 Python 脚本
【发布时间】:2019-09-10 15:03:30
【问题描述】:

我有一个带有逗号分隔字段的 .csv 文件。我从第 3 方收到此文件,内容无法更改。我需要将文件导入数据库,但某些“逗号”分隔字段中有逗号。逗号分隔的字段也是固定长度的 - 当我按照函数 insert_line_csv 中的以下行直接打印字段时,它们以固定长度间隔。

我需要一种有效的方法来收集可以在字段中包含逗号的字段。我希望将这两种方法结合起来。不确定这是否有效。

我正在使用 python 3 - 愿意使用任何库来使工作变得高效和简单。

目前我有以下:

with open(FileName, 'r') as f:
    for count, line in enumerate(f):
        insert_line_csv(count, line)

insert_line_csv 函数看起来像:

def insert_line_csv(line_no, line):
    line = line.split(",")
    field0 = line[0]
    field1 = line[1]
    ...... 

我正在导入 line_no,因为它也正在输入到数据库中。

任何见解将不胜感激。

样本数据集:

text    ,2000.00   ,2018-07-07,textwithoutcomma      ,text     ,1 
text    ,3000.00   ,2018-07-08,textwith,comma        ,text     ,7 
text    ,1000.00   ,2018-07-07,textwithoutcomma      ,text     ,4 

【问题讨论】:

  • 数据样本在这里会有所帮助......
  • 从你的解释看来它是固定宽度的,没有逗号分隔的文件
  • 这可能会有所帮助:stackoverflow.com/questions/8311900/…
  • 提供了一个样本数据集。似乎这可以通过专门在场宽方向上解决。意识到这将是一件痛苦的事情。

标签: python csv


【解决方案1】:

如果逗号分隔的字段都是固定长度的,你应该可以只用计数拼接而不是用逗号拼接,见Split string by count of characters

作为样机代码,您拥有

toParse = line

while (toParse != "")
    chunk = first X chars of toParse
    restOfLine = toParse without the chars just cut off
    write chunk to db
    toParse = restOfLine

恕我直言,应该可以的

编辑: 在看到您的示例数据集后。里面只能有一个逗号吗?如果是这样,您可以通过逗号分隔,读出前 3 个字段,然后读出最后两个。无论剩下什么,你都会再次连接,因为它是第 4 个字段的值。 (如果它有逗号,你需要实际连接那里,如果没有,它已经是值)

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    相关资源
    最近更新 更多