从CSV中的列中删除1000的分隔符?

2024-04-20 12:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python脚本,其中导入的csv值超过1000个逗号。这些值是csv中的字符串。在导入到Python之前,我需要从值中删除逗号,并将字符串转换为csv中的舍入浮点数。在

我尝试过将所有新值附加到一个列表中以使用csv.writer,但我无法想出如何让编写器只替换列中有逗号的值。以下是我目前所掌握的情况。公司名称:

import csv

RoomReport = r'path_to_csv'
new_values_list = []

f = open(RoomReport, "r")
reader = csv.reader(f)
writer = csv.writer(f)

for row in reader:
     useable_area = row[7]

     if "," in useable_area:
         useable_area_no_comma = useable_area.replace(",","")
         useable_area_rounded = int(round(float(useable_area_no_comma)))
         new_values_list.append(useable_area_rounded)


f.close()

Tags: csvno字符串innewarealistreader
2条回答

正如我在一篇评论中提到的,只有当输入csv文件的格式允许数字中的逗号与每个数字之间的逗号区分开来时,才能做到这一点。在

以下是一种方法的示例(通过引用所有值):

"0","1","2","3","4","5","6","7,123.6","8","9"
"0","1","2","3","4","5","6","1,000","8","9"
"0","1","2","3","4","5","6","20,000","8","9"

这里的代码可以满足您的需要。它使用locale.atof函数来简化数字的清理:

^{pr2}$

它从示例输入创建的RoomReport_cleaned.csv将包含以下内容:

"0","1","2","3","4","5","6","7124","8","9"
"0","1","2","3","4","5","6","1000","8","9"
"0","1","2","3","4","5","6","20000","8","9"

请注意,由于输出中的值不再嵌入逗号,因此不再需要引用所有字段,因此可以通过指定csv.QUOTE_ALL来省略。在

也许像这样?在

import re
from sys import stdout

isnum = re.compile('^[0-9, ]+$')
non = re.compile('[, ]')

fd = StringIO()
out = csv.writer(fd)
out.writerow(['foo','1,000,000',19])
out.writerow(['bar','1,234,567',20])

fd.seek(0)
inp = csv.reader(fd)
out = csv.writer(stdout)
for row in inp:
    for i, x in enumerate(row):
        if isnum.match(x):
            row[i] = float(non.sub('', x))
    out.writerow(row)

相关问题 更多 >