Python ';文件不存在';将非ASCII路径传递到xarray.open_数据集时

Python ';文件不存在';将非ASCII路径传递到xarray.open_数据集时,python,onedrive,python-xarray,Python,Onedrive,Python Xarray,尝试打开.nc文件时出现问题。对于我的大学工作,我需要处理一些存储在.nc文件中的数据,所以我决定尝试一下“xarray”库。这些文件位于OneDrive云上。将包含非ASCII字符的路径传递给“open_dataset”函数时,会发生以下错误: import xarray as xr path1 = (r'C:\Users\myname\OneDrive - Prirodoslovno-matematički fakultet' '\DACCI

尝试打开.nc文件时出现问题。对于我的大学工作,我需要处理一些存储在.nc文件中的数据,所以我决定尝试一下“xarray”库。这些文件位于OneDrive云上。将包含非ASCII字符的路径传递给“open_dataset”函数时,会发生以下错误:

    import xarray as xr
    path1 = (r'C:\Users\myname\OneDrive - Prirodoslovno-matematički fakultet'
                 '\DACCIWA\DATA\Sodar\Save_KIT_CM_20160702.nc')
    ds = xr.open_dataset(path1)

    Traceback (most recent call last):

    File "C:\Users\petar\Desktop\Geofizika\5. Godina\KB - Research opportunity\test.py", line 9, in <module>
    ds = xr.open_dataset(path1)

    File "C:\Users\petar\Anaconda3\lib\site-packages\xarray\backends\api.py", line 499, in open_dataset
    filename_or_obj, group=group, lock=lock, **backend_kwargs

    File "C:\Users\petar\Anaconda3\lib\site-packages\xarray\backends\netCDF4_.py", line 389, in open
    return cls(manager, group=group, mode=mode, lock=lock, autoclose=autoclose)

    File "C:\Users\petar\Anaconda3\lib\site-packages\xarray\backends\netCDF4_.py", line 335, in __init__
    self.format = self.ds.data_model

    File "C:\Users\petar\Anaconda3\lib\site-packages\xarray\backends\netCDF4_.py", line 398, in ds
    return self._acquire()

    File "C:\Users\petar\Anaconda3\lib\site-packages\xarray\backends\netCDF4_.py", line 392, in _acquire
    with self._manager.acquire_context(needs_lock) as root:

    File "C:\Users\petar\Anaconda3\lib\contextlib.py", line 112, in __enter__
    return next(self.gen)

    File "C:\Users\petar\Anaconda3\lib\site-packages\xarray\backends\file_manager.py", line 183, in acquire_context
    file, cached = self._acquire_with_cache_info(needs_lock)

    File "C:\Users\petar\Anaconda3\lib\site-packages\xarray\backends\file_manager.py", line 201, in _acquire_with_cache_info
    file = self._opener(*self._args, **kwargs)

    File "netCDF4\_netCDF4.pyx", line 2135, in netCDF4._netCDF4.Dataset.__init__

    File "netCDF4\_netCDF4.pyx", line 1752, in netCDF4._netCDF4._ensure_nc_success

    FileNotFoundError: [Errno 2] No such file or directory: b'C:\\Users\\petar\\OneDrive - Prirodoslovno-matemati\xc4\x8dki fakultet\\DACCIWA\\DATA\\Sodar\\Save_KIT_CM_20160702.nc'
将xarray作为xr导入
路径1=(r'C:\Users\myname\OneDrive-Prirodoslovno matematički fakultet'
“\DACCIWA\DATA\Sodar\Save\u KIT\u CM\u 20160702.nc”)
ds=xr.open_数据集(路径1)
回溯(最近一次呼叫最后一次):
文件“C:\Users\petar\Desktop\Geofizika\5.Godina\KB-Research opportunity\test.py”,第9行,在
ds=xr.open_数据集(路径1)
文件“C:\Users\petar\Anaconda3\lib\site packages\xarray\backends\api.py”,第499行,在OpenU数据集中
文件名\u或\u obj,group=group,lock=lock,**后端\u kwargs
文件“C:\Users\petar\Anaconda3\lib\site packages\xarray\backends\netCDF4\uuuz.py”,第389行,处于打开状态
返回cls(管理器,组=组,模式=模式,锁=锁,自动关闭=自动关闭)
文件“C:\Users\petar\Anaconda3\lib\site packages\xarray\backends\netCDF4_uu.py”,第335行,在uu init中__
self.format=self.ds.data\u模型
文件“C:\Users\petar\Anaconda3\lib\site packages\xarray\backends\netCDF4\uuz.py”,第398行,在ds中
返回自我。_acquire()
文件“C:\Users\petar\Anaconda3\lib\site packages\xarray\backends\netCDF4.py”,第392行,在
使用self.\u manager.acquire\u context(需要锁定)作为根目录:
文件“C:\Users\petar\Anaconda3\lib\contextlib.py”,第112行,输入__
返回下一个(self.gen)
文件“C:\Users\petar\Anaconda3\lib\site packages\xarray\backends\File\u manager.py”,第183行,在acquire\u上下文中
文件,cached=self.\u获取\u和\u缓存\u信息(需要\u锁定)
文件“C:\Users\petar\Anaconda3\lib\site packages\xarray\backends\File\u manager.py”,第201行,包含缓存信息
文件=self.\u opener(*self.\u args,**kwargs)
netCDF4.\u netCDF4.Dataset.\u init中的文件“netCDF4\\u netCDF4.pyx”,第2135行__
文件“netCDF4\\u netCDF4.pyx”,第1752行,在netCDF4中。\u netCDF4.\u确保\u nc\u成功
FileNotFoundError:[Errno 2]没有这样的文件或目录:b'C:\\Users\\petar\\OneDrive-Prirodoslovno matemati\xc4\x8dki fakultet\\DACCIWA\\DATA\\Sodar\\Save\u KIT\u CM\u 20160702.nc'
我很困惑,因为文件肯定在那里(在上面的代码中,我将路径中的名称替换为“myname”,它不包含非ASCII字符)。起初,我认为这与OneDrive有关,但我在其上创建了一个文件夹,其路径不包含非ASCII字符,并且它可以打开这些字符,这没有问题

我尝试的(虽然这实际上只是一种射击,不熟悉编码等): -以原始字符串的形式输入字符串(就像您转义斜杠时所做的那样)

我在最后一行注意到字符串路径前面有字母“b”,显然这意味着字符串是“字节文字”,只能包含ASCII字符,在这种情况下,为什么xarray将字符串转换/解释为字节文字?我如何打开文件?
谢谢你的帮助

默认情况下,Python可能使用
utf-8
编码,但Windows上的文件系统可能对文件名使用不同的编码,即
cp1250
。至少我在旧版Windows中的波兰语字符有这个问题,但是在本地文件中,而不是在云驱动器中。@furas,你是如何修复的(如果你修复了的话)?我记得
filename.encode('cp1250')
以字节的形式获取它。但很久以前,我学会了使用没有本机字符和空格的文件名,因为这两种情况都会产生问题——不仅在Python中,而且在任何其他语言或程序中都会出现问题。