读取csv属性时Python字符串替换不起作用

2024-09-23 04:26:15 发布

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

我试图通过删除任何属性中出现的"'来管理CSV文件。但是我不允许替换值,即使我已经在Python控制台中进行了替换。你知道吗

我是这样做的:

import csv

input_data = open("D:/data/demo.csv", encoding="utf8")
reader = csv.DictReader(input_data)
csv_columns = reader.fieldnames

f = open("D:/data/output.csv", 'w', encoding="utf8", newline='')

for line in reader:
    try:
        new_line = None
        for prop in line:
            cured_str = str(line[prop]).replace("\"", "").replace('"', '').replace('"', "'").replace('"', "\'")

            if new_line == None:
                new_line = cured_str
            else:
                new_line += ", " + cured_str

        f.write(new_line + "\n")

    except Exception as err:
        print("Error: ", err)

input_data.close()
f.close()

代码执行得很好,但是如果检查cured_str的值,"'永远不会被替换。例如,line[prop]中的值是:

'I\\'m at Fazıl Bey\\'in @aaa in Rome, Italy '

完整的demo.csv内容是:

id,message_id,date,text,tags,tweet_lang,source,place,geom,retweets,tweet_favorites,photo_url,quoted_status_id,user_id,user_name,user_location,followers,friends,user_favorites,status,user_lang,latitude,longitude,text_translated_en,src_lang,src_accuracy,text_translated_en_parallel,up_filter,prediction,probability_0,probability_1
10,569282882658807808,2015-02-21 23:49:50,fav,,,Twitter for Android,,0101000055B79C93C406DACC43C2B834440,,,,,1567775498,eliovmek,,,,,,,41.024757,28.787008,,zu,92.0,Social fav,,0,0.9732880735563579,0.026711926443642064
11,651384744010252288,2015-10-06 13:13:19,"Is I'm at  she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"IsI'm at  she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"Is I'm at  she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"Is she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"Is she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"Is she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"Is she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"Is she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"Is she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858

PS:它可以在控制台中工作,但不能从脚本中工作。你知道吗


Tags: csvinislinetratsheaaa
2条回答

最后我用了:

line[prop] = ''.join(c for c in str(line[prop]) if c not in '"\'')

出于某种奇怪的原因,其他的都奏效了

我不确定我是否完全理解,但您似乎使用了重复的替换,对.replace()的调用多于必要的调用。你知道吗

以下是代码的简化版本:

import csv

with open('demo.csv') as in_file, open('out.csv', 'w', newline='') as out_file:
    reader = csv.DictReader(in_file)
    writer = csv.DictWriter(out_file, fieldnames=reader.fieldnames)
    writer.writeheader()

    for row in reader:
        new_row = {
            k: v.replace('"', '').replace("'", '').strip()
            for k, v in row.items()}
        writer.writerow(new_row)

使用此代码,从输入开始demo.csv

id,message_id,date,text,tags,tweet_lang,source,place,geom,retweets,tweet_favorites,photo_url,quoted_status_id,user_id,user_name,user_location,followers,friends,user_favorites,status,user_lang,latitude,longitude,text_translated_en,src_lang,src_accuracy,text_translated_en_parallel,up_filter,prediction,probability_0,probability_1
10,569282882658807808,2015-02-21 23:49:50,fav,,,Twitter for Android,,0101000055B79C93C406DACC43C2B834440,,,,,1567775498,eliovmek,,,,,,,41.024757,28.787008,,zu,92.0,Social fav,,0,0.9732880735563579,0.026711926443642064
11,651384744010252288,2015-10-06 13:13:19,"Is I'm at  she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,"IsI'm at  she İlia? ",,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"I'm at Fazıl Bey'in @aaa in Rome, Italy ",,0,0.9181253978980514,0.08187460210194858

我们得到以下out.csv

id,message_id,date,text,tags,tweet_lang,source,place,geom,retweets,tweet_favorites,photo_url,quoted_status_id,user_id,user_name,user_location,followers,friends,user_favorites,status,user_lang,latitude,longitude,text_translated_en,src_lang,src_accuracy,text_translated_en_parallel,up_filter,prediction,probability_0,probability_1
10,569282882658807808,2015-02-21 23:49:50,fav,,,Twitter for Android,,0101000055B79C93C406DACC43C2B834440,,,,,1567775498,eliovmek,,,,,,,41.024757,28.787008,,zu,92.0,Social fav,,0,0.9732880735563579,0.026711926443642064
11,651384744010252288,2015-10-06 13:13:19,Is Im at  she İlia?,,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"Im at Fazıl Beyin @aaa in Rome, Italy",,0,0.9181253978980514,0.08187460210194858
11,651384744010252288,2015-10-06 13:13:19,IsIm at  she İlia?,,,Foursquare,,0101000020E6100000B37CFA5B44063D4027A1D377277F4440,,,,,156044562,ajan34,,,,,,,40.99339197,29.02448058,,tr,98.0,"Im at Fazıl Beyin @aaa in Rome, Italy",,0,0.9181253978980514,0.08187460210194858

你打算这么做吗?你知道吗

相关问题 更多 >