You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R/Reticulate读取含阿拉伯语(波斯语)文件名的文件遇阻

解决含波斯语文件名的Excel文件读取问题(R/Reticulate)

一、Reticulate调用Python直接读取文件名的解决方案

问题根源

Windows环境下,RStudio控制台编码与CMD存在差异,导致R传递给Python的波斯语文件名编码未被正确识别,从而触发"文件找不到"错误。

具体解决步骤

  1. 确认工作目录一致性
    先检查R和Python的工作目录是否一致,避免因路径不同导致文件找不到:
library(reticulate)
# 查看R的工作目录
getwd()
# 查看Python的工作目录
py_run_string("import os; print(os.getcwd())")

若不一致,用setwd()或py$os$chdir()统一工作目录。

  1. 转码文件名适配系统编码
    Windows对波斯语文件名通常使用CP1256编码,将R中的UTF-8文件名转码后传递给Python:
file_name <- "توزیع نقدی 1401.xls"
# 转码为CP1256编码
file_name_cp1256 <- iconv(file_name, from = "UTF-8", to = "CP1256")
# 验证文件是否存在
py$os$path$exists(file_name_cp1256)
# 读取文件并传回R
py_run_string(paste0("import pandas as pd; df = pd.read_excel('", file_name_cp1256, "')"))
df <- py$df
  1. 使用Python路径模块自动处理编码
    让Python负责文件名的编码识别,避免手动转码:
library(reticulate)
py_run_string("import os, pandas as pd")
file_name <- "توزیع نقدی 1401.xls"
# 构造绝对路径确保识别
abs_path <- py$os$path$abspath(file_name)
# 直接读取文件
df <- py$pd$read_excel(abs_path)

二、R直接读取含波斯语文件名的Excel文件方法

方法1:转码文件名后使用readxl/openxlsx

library(readxl)
file_name <- "توزیع نقدی 1401.xls"
# 转码为CP1256编码
file_name_conv <- iconv(file_name, from = "UTF-8", to = "CP1256")
# 读取xls文件
df <- read_excel(file_name_conv)

若使用openxlsx包(仅支持xlsx格式):

library(openxlsx)
df <- read.xlsx(file_name_conv)

方法2:通过list.files()索引读取

利用R的list.files()获取系统识别的文件名,再匹配读取:

# 获取目录下所有xls/xlsx文件(含完整路径)
file_list <- list.files(pattern = "\\.xls(x)?$", full.names = TRUE)
# 匹配目标波斯语文件名
target_file <- file_list[grepl("توزیع نقدی", file_list)]
df <- read_excel(target_file)

方法3:调整系统区域设置(可选)

进入Windows控制面板「区域」→「管理」→「更改系统区域设置」,勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,重启系统后可直接读取UTF-8编码的非ASCII文件名(注意:该设置可能影响部分旧程序兼容性)。

内容的提问来源于stack exchange,提问作者Mohamed Mostafa El-Sayyad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:27:30