Python 读取大文件时,脚本将以PermissionError[错误13]终止

Python 读取大文件时,脚本将以PermissionError[错误13]终止,python,Python,是的,我知道这个或类似的问题已经发布到这个论坛上,但到目前为止,没有一个答案足以解决我的问题: 这里我有以下代码: with open(filename,'r',buffering=2000000) as f: f.readline() # takes header away for i, l in enumerate(f): # count the number of lines print('Counting {}'.form

是的,我知道这个或类似的问题已经发布到这个论坛上,但到目前为止,没有一个答案足以解决我的问题:

这里我有以下代码:

with open(filename,'r',buffering=2000000) as f:
    f.readline()                # takes header away
    for i, l in enumerate(f):   # count the number of lines
        print('Counting {}'.format(i),end='\r')
        pass
发生的情况是,该文件是一个23GB的csv文件。我得到以下错误:

File "programs\readbigfile.py", line 33, in <module>
    for i, l in enumerate(f):  # count the number of lines
PermissionError: [Errno 13] Permission denied
文件“programs\readbigfile.py”,第33行,在
对于枚举(f)中的i,l:#计算行数
PermissionError:[Errno 13]权限被拒绝
错误总是发生在行号
1374200
处。我用一个文本编辑器检查了文件,在那一行没有什么异常。这发生在我身上,使用的是相同的文件,但版本较小(少了几GB)。然后它突然起作用了。 任何其他进程都没有使用该文件。

关于这个错误为什么发生在文件中间? 警察局。我正在一台装有Intel i5-6500 CPU/16Gb内存和NVIDIA GeForce GTX 750 Ti卡的计算机上运行此程序。 系统是Windows10Python 3.7.6 x64/Anaconda
该文件位于本地磁盘上,不涉及网络。

无论是什么,我认为您的代码都可以

我的想法是:

  • 你需要这个缓冲吗?你有没有试着把它完全去掉
  • 我看到你在Windows上运行。我不知道这是否重要,但许多奇怪的问题发生在Windows上
  • 如果您试图在网络中的磁盘(samba等)上访问它,可能它没有完全同步
  • 您确定在此期间没有其他人尝试访问此文件吗?卓越
  • 您是否尝试使用
    csv.reader
    读取此文件?我不认为这会有帮助,只是想知道
  • 您可以
    try/except
    并在出现错误时检查
    os.stat
    os.access
    (如果您有权限)
  • 也许是打印的问题,听起来像是一个大文件。你试过不打印吗?如果i%1000==0:print(…)

我发现错误是由于文件写入错误造成的,原因可能是磁盘块损坏或磁盘系统故障。问题是,文件中间有一个地方,我只是通过重新创建文件来更正。这是一个随机错误,因此,如果您发现自己处于相同的情况,其中一个检查应该是文件本身的可靠性。

谢谢您的输入!我可能会尝试取消打印,但我不知道错误发生在哪里:)我尝试了不打印:这次错误发生得更快。除非添加
try/except:print…
:)