在删除不想要的值的同时读取csv文件中的值

时间:2019-07-03 09:09:08

标签: python csv

我想读取一个包含浮点数和数组的csv文件。我只想收集浮点值并摆脱数组的值。

我尝试了以下代码:

with open('resultsMC_100_var.csv', "r") as input:
with open('new.csv', "w") as output :
    for line in input :
        if not line.count(('[') or (']')) :
           output.write(line)

但是问题是数组值写在多行上,因此代码无法按预期工作...

我向您展示了csv文件的第一行,因此您可以了解其构建方式:

51.3402815384;28.1789716134;76.7144759149;28.5590830355;50.719035557;4.83225361254;[  23.35145494   23.6919634    21.1406396    77.35953884  121.68508966   23.02126533   24.64623985   22.30757623   59.53286234   86.01880338   22.34363071   29.75759786   30.94420056   27.24198645   21.62989704
   22.57036406   23.09155954   26.32781992   22.82521813   99.12230864
   22.04329951   22.50081984  104.84634521   59.48921929   34.47985424

我想做的是一个读取所有值的代码,然后在遇到符号[时停止,然后在遇到]时再次读取。我不知道该怎么做,并且在该网站上没有找到类似的主题,因此,我感谢任何能为我提供帮助的人。

2 个答案:

答案 0 :(得分:1)

您的陈述的问题在于line.count(('[') or (']'))与编写line.count('[')相同,因为非空字符串的求值结果为True ...

一个简单的解决方案是使用正则表达式:

import re

with open('test.txt', "r") as f:
    content = f.read()

    with open('new.txt', "w") as output :
        new_line = re.sub(r"\[[^\[\]]*\]", "", content, flags=re.MULTILINE)
        output.write(new_line)

答案 1 :(得分:0)

您可以尝试使用正则表达式。我认为这是可行的。

import re

inp = open("results.csv", "r")
inp_data = inp.read()

out_data = re.sub(r"\[[^\[\]]*\]", "", inp_data)
out = open("xyz.csv", "w")

out.write(out_data)

这首先将您的输入数据读取为字符串。 然后,将所有数组替换为“”。然后,您可以将此更新的字符串写入新文件。希望这会有所帮助!