【问题标题】:How to replace blank space when summing a CSV column对 CSV 列求和时如何替换空格
【发布时间】:2018-06-08 16:26:39
【问题描述】:

我正在尝试构建一个 python 脚本,该脚本将总结一个 一个大型 csv 文件的列并给我输出。我能够总结 带有以下脚本的列:

port csv with open("o77069894.out","r+",encoding='utf8') as fin:
headerline = fin.readline()

amount = 0
debit = 0
value = 0
for row in csv.reader(fin,delimiter=","):

    value = float(row[17]) if value else 0.0
    debit+=value
print (debit)

但是当我使用带有“12.4 空格”之类的数字(该字段有空格)的 csv 列对其进行测试时,我遇到了一个错误。所以我尝试在for循环中使用: value =row[17].strip() 但抛出错误:

Traceback(最近一次调用最后一次):文件“sum_csv1_v3_modified.py”, 第 8 行,在 对于 csv.reader(fin,delimiter="|") 中的行:文件“C:\ProgramData\Anaconda3\lib\codecs.py”,第 321 行,在解码中 (结果,消耗)= self._buffer_decode(数据,self.errors,最终)UnicodeDecodeError:'utf-8'编解码器无法解码位置的字节0xbf 3213: 无效的 id 起始字节

我无法显示真实数据,因为它是机密的,但我认为由于代码适用于其他 csv 文件,问题可能是由于空白所致。即使这是一个文件问题,我也想知道如何处理这些字段。 另外我想知道如何编辑我的代码以替换数字中的“,”或“$”。谢谢。

【问题讨论】:

标签: python csv


【解决方案1】:

看起来 '12.4 blank space' 是一个字符串。试试 str.replace()。

a = '12.4 blank space'
a = a.replace(' blank space','')
float(a)

【讨论】:

    【解决方案2】:

    你可以试试这个,因为可能存在一些非 ASCII 字符

    row[17].encode('utf-8').strip()
    

    【讨论】:

    • 你知道我如何替换数字之间的逗号吗?例如:12,000.93
    • float(a.replace(',',''))
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2021-03-11
    • 2021-11-28
    • 2020-02-05
    • 2011-02-21
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多