如何处理读取csv的问题,csv是一个分号分隔的文件,其中一些字符串包含分号



我遇到的问题可以通过在csv(分号分隔(文件中显示几个示例行来说明,它们看起来像这样:

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

请注意,在一行中,一个字符串用引号括起来,里面有一个分号(在我的输入文件中,除了包含分号的列外,没有一列的两边有引号(。

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

想要的输出是这样的,"咖啡公司"周围没有引号,"咖啡"one_answers"公司"之间没有分号:

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)

这里有一种使用Pandas库的替代方法,它使您不必为循环编码:

import pandas as pd
#Read csv into dataframe df
df = pd.read_csv('data.csv', sep=';', header=None)
#Remove semicolon in column 2
df[2] = df[2].apply(lambda x: x.replace(';', ''))

这给出了以下数据帧df:

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

Pandas提供了几个内置功能,可以帮助您处理数据或得出统计结论。使用表格格式的数据也可以使使用它更加直观。

最新更新