使用datatable读取CSV遇双错误,求批量合并25个CSV的解决方案
问题:datatable读取本地CSV文件失败及批量合并方案
想用datatable库批量合并25个CSV文件(因该库处理速度快),但读取第一个文件时连续报错,试过路径转义、更换斜杠、添加r前缀等方法仍未解决。
1. 初始代码的Unicode转义错误
代码:
import time import datatable as dt print(dt.__version__) df_2016_1 = dt.fread("C:\Users\HP\Desktop\City of Toronto - Parking Data\Parking_Tags_Data_2016_1.csv")
报错信息:
File "<ipython-input-31-e1b12aa55c73>", line 5 df_2016_1 = dt.fread("C:\Users\HP\Desktop\City of Toronto - Parking Data\Parking_Tags_Data_2016_1.csv") ^ SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
2. 路径转义后文件不存在错误
修改后代码:
import time import datatable as dt print(dt.__version__) df_2016_1 = dt.fread("C:\\Users\\HP\\Desktop\\City of Toronto - Parking Data\\Parking_Tags_Data_2016_1.csv")
报错信息:
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-29-50d21994b471> in <module> ----> 1 df_2016_1 = dt.fread("C:\\Users\\HP\\Desktop\\City of Toronto - Parking Data\\Parking_Tags_Data_2016_1.csv") 2 1 frames /usr/local/lib/python3.8/dist-packages/datatable/utils/fread.py in _resolve_source_file(file, tempfiles) 197 return _resolve_archive(xpath, ypath, tempfiles) 198 else: --> 199 raise ValueError("File %s`%s` does not exist" 200 % (escape(xpath), escape(ypath))) 201 if not os.path.isfile(file): ValueError: File /content/C:\Users\HP\Desktop\City of Toronto - Parking Data\Parking_Tags_Data_2016_1.csv does not exist
核心原因与解决方法
从第二个报错的路径/content/C:\Users\...可以看出:代码运行在Colab或类似云端环境,但直接使用了Windows本地文件路径,云端无法访问本地磁盘文件。
分场景解决:
场景1:本地Python环境运行
解决路径转义问题即可,两种方式二选一:
- 使用原始字符串前缀
r(推荐):df_2016_1 = dt.fread(r"C:\Users\HP\Desktop\City of Toronto - Parking Data\Parking_Tags_Data_2016_1.csv") - 将反斜杠替换为正斜杠:
df_2016_1 = dt.fread("C:/Users/HP/Desktop/City of Toronto - Parking Data/Parking_Tags_Data_2016_1.csv")
场景2:云端环境(如Colab)运行
需要先将本地文件上传到云端,再读取:
- 直接上传单个/多个文件:
from google.colab import files uploaded = files.upload() # 上传完成后,用文件名读取 df_2016_1 = dt.fread("Parking_Tags_Data_2016_1.csv") - 挂载Google Drive(适合批量文件):
from google.colab import drive drive.mount('/content/drive') # 替换为你Drive中的文件路径 df_2016_1 = dt.fread("/content/drive/MyDrive/City of Toronto - Parking Data/Parking_Tags_Data_2016_1.csv")
批量合并25个CSV的优化代码
解决单个文件读取问题后,可通过以下代码批量合并:
import datatable as dt import glob # 根据运行环境选择路径匹配方式 # 本地环境: file_paths = glob.glob(r"C:\Users\HP\Desktop\City of Toronto - Parking Data\Parking_Tags_Data_*.csv") # 云端环境(文件在当前目录): # file_paths = glob.glob("Parking_Tags_Data_*.csv") # 云端环境(文件在Drive): # file_paths = glob.glob("/content/drive/MyDrive/City of Toronto - Parking Data/Parking_Tags_Data_*.csv") # 批量读取所有CSV并合并 merged_df = dt.rbind(*[dt.fread(path) for path in file_paths]) # 保存合并后的文件 merged_df.to_csv("merged_parking_tags_data.csv")
内容的提问来源于stack exchange,提问作者Ms. Baker_Coder
相关产品推荐
相关产品推荐

