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

使用MDAnalysis加载Amber轨迹时遭遇PermissionError求助

MDAnalysis加载批量Amber NetCDF轨迹时的随机PermissionError问题

运行代码

clusters = 1085
list_trajectories = []
for i in range(clusters):
    list_trajectories.append(os.path.join(path_trajectories, f'cluster_{i}/prod/dry.CL_00.nc'))
u = Universe(topology, list_trajectories)
ag = u.atoms

问题描述

运行上述代码时出现PermissionError: [Errno 1] Operation not permitted: '/home/path_to_trajectories/2P49_clusters/cluster_138/prod/dry.CL_00.nc',具体情况如下:

  • 已检查出错文件的权限,与其他可正常加载的文件权限一致(-rw-r-----)
  • 错误表现无固定规律:
    • 加载少量轨迹(如前400个集群)时,第一次运行正常
    • 重新运行同一代码单元(即使重新赋值所有变量),第二次必然失败
    • 出错的集群编号不固定,有时会指向cluster_490等其他文件

怀疑是内存问题,但没有其他思路,寻求解决办法。

完整报错信息

PermissionError                           Traceback (most recent call last)
Cell In[8], line 10
      8 for i in range(clusters):
      9     list_trajectories.append(os.path.join(path_old_trajectories, f'2P49_clusters/cluster_{i}/prod/dry.CL_00.nc'))
---> 10 u = Universe(topology, list_trajectories, in_memory=False)

File ~/miniforge3/envs/alessia_spib/lib/python3.12/site-packages/MDAnalysis/core/universe.py:375, in Universe.__init__(self, topology, all_coordinates, format, topology_format, transformations, guess_bonds, vdwradii, fudge_factor, lower_bound, in_memory, in_memory_step, *coordinates, **kwargs)
    370 coordinates = _resolve_coordinates(self.filename, *coordinates,
    371                                    format=format,
    372                                    all_coordinates=all_coordinates)
    374 if coordinates:
--> 375     self.load_new(coordinates, format=format, in_memory=in_memory,
    376                 in_memory_step=in_memory_step, **kwargs)
    378 if transformations:
    379     if callable(transformations):

File ~/miniforge3/envs/alessia_spib/lib/python3.12/site-packages/MDAnalysis/core/universe.py:580, in Universe.load_new(self, filename, format, in_memory, in_memory_step, **kwargs)
    577 # supply number of atoms for readers that cannot do it for themselves
    578 kwargs['n_atoms'] = self.atoms.n_atoms
--> 580 self.trajectory = reader(filename, format=format, **kwargs)
    581 if self.trajectory.n_atoms != len(self.atoms):
    582     raise ValueError("The topology and {form} trajectory files don't"
    583                      " have the same number of atoms!\n"
    584                      "Topology number of atoms {top_n_atoms}\n"
    (...)
    588                          fname=filename,
    589                          trj_n_atoms=self.trajectory.n_atoms))

File ~/miniforge3/envs/alessia_spib/lib/python3.12/site-packages/MDAnalysis/lib/util.py:2553, in store_init_arguments.<locals>.wrapper(self, *args, **kwargs)
    2551             else:
    2552                 self._kwargs[key] = arg
--> 2553 return func(self, *args, **kwargs)

File ~/miniforge3/envs/alessia_spib/lib/python3.12/site-packages/MDAnalysis/coordinates/chain.py:270, in ChainReader.__init__(self, filenames, skip, dt, continuous, convert_units, **kwargs)
    268 if dt is not None:
    269     kwargs['dt'] = dt
--> 270 self.readers = [core.reader(filename, convert_units=convert_units, **kwargs)
    271                 for filename in filenames]
    272 self.filenames = np.array([fn[0] if isinstance(fn, tuple) else fn
    273                                                 for fn in filenames])
    274 # pointer to "active" trajectory index into self.readers

File ~/miniforge3/envs/alessia_spib/lib/python3.12/site-packages/MDAnalysis/coordinates/core.py:82, in reader(filename, format, **kwargs)
     80     Reader = get_reader_for(filename, format=format)
     81 try:
---> 82     return Reader(filename, **kwargs)
     83 except ValueError:
     84     errmsg = f'Unable to read {filename} with {Reader}.'

File ~/miniforge3/envs/alessia_spib/lib/python3.12/site-packages/MDAnalysis/lib/util.py:2553, in store_init_arguments.<locals>.wrapper(self, *args, **kwargs)
    2551             else:
    2552                 self._kwargs[key] = arg
--> 2553 return func(self, *args, **kwargs)

File ~/miniforge3/envs/alessia_spib/lib/python3.12/site-packages/MDAnalysis/coordinates/TRJ.py:446, in NCDFReader.__init__(self, filename, n_atoms, mmap, **kwargs)
    443 super(NCDFReader, self).__init__(filename, **kwargs)
    445 # ensure maskandscale is off so we don't end up double scaling
--> 446 self.trjfile = NCDFPicklable(self.filename,
    447                              mmap=self._mmap,
    448                              maskandscale=False)
    450 # AMBER NetCDF files should always have a convention
    451 try:

File ~/miniforge3/envs/alessia_spib/lib/python3.12/site-packages/scipy/io/_netcdf.py:247, in netcdf_file.__init__(self, filename, mode, mmap, version, maskandscale)
    245 self.filename = filename
    246 omode = 'r+' if mode == 'a' else mode
--> 247 self.fp = open(self.filename, '%sb' % omode)
    248 if mmap is None:
    249     # Mmapped files on PyPy cannot be usually closed
    250     # before the GC runs, so it's better to use mmap=False
    251     # as the default.
    252     mmap = (not IS_PYPY)

PermissionError: [Errno 1] Operation not permitted: '/home/path_to_trajectories/2P49_clusters/cluster_138/prod/dry.CL_00.nc'

内容的提问来源于stack exchange,提问作者Alessia Karasani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:56:09