合并多个CSV文件为一个 - python
合并多个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)
问题出现的原因是文件使用的编码不是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。