合并多个CSV文件为一个 - python

10 浏览
0 Comments

合并多个CSV文件为一个 - python

有以下代码:

遇到错误:utf-8' codec can't decode byte 0x92 in position 747: invalid start byte

tabula.convert_into_by_batch("C:\\PATH",output_format="csv",pages="all" )
files=os.path.join("C:\\PATH","*.csv")
files=glob.glob(files)
files=os.path.join("C:\\PATH","*.csv")
files=glob.glob(files)
df=[]
df=pd.concat(map(pd.read_csv,files),ignore_index=True)

0
0 Comments

问题出现的原因是文件使用的编码不是UTF-8,而是其他编码,如Latin1、CP1250等。解决方法是根据文件的编码使用不同的encoding参数来读取文件。如果所有文件都使用相同的编码(如latin1),则可以使用map函数将read_csv应用于所有文件。如果文件可能使用不同的编码,则需要使用for循环和try/except来捕获问题并使用不同的编码再次运行read_csv。

代码示例如下:

# --- 循环之前 ---
all_df = []
# --- 循环 ---
for name in files:
    for encoding in ['utf-8', 'latin1', 'cp1250']:
        try:
            df = read_csv(name, encoding=encoding)
            all_df.append(df)    
            break
        except:
            pass
    else:  # 特殊的for/else结构 - 当在for循环中没有使用break时执行
        print("无法读取文件:", name)
# --- 循环之后 ---
df = pd.concat(all_df, ignore_index=True)

以上代码将尝试使用utf-8、latin1和cp1250这三种编码读取文件,如果读取失败,则继续尝试下一个编码。如果所有编码都尝试过后仍然无法读取文件,则输出错误信息。最后,将所有读取成功的数据框合并成一个数据框df。

0