【问题标题】:CSV file rows getting cut at the endCSV 文件行最后被剪切
【发布时间】:2017-04-25 01:48:07
【问题描述】:

目前我有一个想要操作的原始 CSV 文件。每行的 [3] 值,即 row[3] 包含一个字符串,其中包含字母“HKD”和一个数字。我正在尝试创建一个删除字母和空格的新 CSV 文件。出于某种原因,当我这样做时,最后约 60 行被切断了。我试图打印出所有行,它们在 python shell 中显示得很好,但不会打印到我的 CSV 上。我不确定为什么。 csv 输出文件在第 1931 行被截断,但它并没有完全截断整行,它只是在第一列中显示 1931,而不是其余数据。

索引 1931 附近的打印输出:

['1929', '8163 ', 'Merdeka Financial Services Group Ltd.', '154']
['1930', '8179 ', 'Food Idea Holdings Ltd.', '153']
['1931', '8079 ', 'Easy Repay Finance & Investment Ltd.', '150']
['1932', '8106 ', 'Zheda Lande Scitech Ltd. - H Shares', '149']
['1933', '1160 ', 'Grand Investment International Ltd.', '149']
['1934', '8363 ', 'SDM Group Holdings Ltd.', '148']

下面是我的代码:

import csv
csv_in = open('mcapdata.csv','rb')

writer = csv.writer(open('final-HK-MCap.csv','a'))

for row in csv.reader(csv_in):
    row[3] = row[3].replace('HKD ','')
    writer.writerow(row)

我不明白为什么它会在 shell 中很好地打印,但不会输出到我的 csv 文件中。我的 python 代码中是否存在导致这种情况的不良做法?

【问题讨论】:

  • 我在数据中看不到任何明显的东西。最后你不要.close() 文件。如果您单独打开'final-HK-MCap.csv',将其传递给csv.writer(),然后在最后对文件执行.close(),这会改变什么吗?您的问题可能有什么问题,请参阅 here 使用 with 干净地打开和关闭文件。

标签: python csv


【解决方案1】:

可能是脚本结束时文件缓冲区没有被写出。在文件指针对象上调用.close() 将刷新缓冲区。 pythonic 方法是使用with 上下文。

import csv

with open('mcapdata.csv','rb') as csv_in, open('final-HK-MCap.csv','a') as csv_out:
    reader = csv.reader(csv_in)
    writer = csv.writer(csv_out)

    for row in reader:
        row[3] = row[3].replace('HKD ','')
        writer.writerow(row)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多