Skip to main content
 首页 » 编程设计

python之如何解决读取 csv 的问题,该文件是分号分隔的文件,其中某些字符串包含分号

2025年05月04日19小虾米

可以通过在我的 csv(分号分隔)文件中显示几个示例行来说明我遇到的问题,如下所示:

4;1;"COFFEE; COMPANY";4 
3;2;SALVATION ARMY;4 

请注意,在一行中,一个字符串用引号引起来并且其中有一个分号(在我的输入文件中,除了包含分号的列外,所有列都没有引号)。

这些带有引号和分号的行导致了问题——基本上,我的代码计算列/字段中引号内的分号。因此,当我读取这一行时,它会将字符串中的这个分号读取为分隔符,从而使该行看起来好像有一个额外的字段/列。

所需的输出如下所示,“coffee company”两边没有引号,“coffee”和“company”之间没有分号:

4;1;COFFEE COMPANY;4 
3;2;SALVATION ARMY;4 

实际上,这个带有“咖啡公司”的专栏对我来说完全没用,所以最终文件也可以是这样的:

4;1;xxxxxxxxxxx;4 
3;2;xxxxxxxxxxx;4 

我怎样才能去掉这一特定列中的分号,而不去掉所有其他分号?

请您参考如下方法:

csv 模块使得处理这样的情况相对容易:

# Contents of input_file.csv 
# 4;1;"COFFEE; COMPANY";4 
# 3;2;SALVATION ARMY;4 
 
import csv 
input_file = 'input_file.csv'  # Contents as shown in your question. 
 
with open(input_file, 'r', newline='') as inp: 
    for row in csv.reader(inp, delimiter=';'): 
        row[2] = row[2].replace(';', '')  # Remove embedded ';' chars. 
        # If you don't care about what's in the column, use the following instead: 
        # row[2] = 'xyz'  # Value not needed. 
        print(';'.join(row)) 

打印输出:

4;1;COFFEE COMPANY;4 
3;2;SALVATION ARMY;4 

后续问题:如何将此数据写入新的 csv 文件?

import csv 
input_file = 'input_file.csv'  # Contents as shown in your question. 
output_file = 'output_file.csv' 
 
with open(input_file, 'r', newline='') as inp, \ 
     open(output_file, 'w', newline='') as outp: 
    writer= csv.writer(outp, delimiter=';') 
    for row in csv.reader(inp, delimiter=';'): 
        row[2] = row[2].replace(';', '')  # Remove embedded ';' chars. 
        writer.writerow(row)