使用Python 3.8写入文件时出现权限错误
我正在按单词的长度拆分一个大单词列表 我没有找到不同的方法,所以我决定用python为它编写一个脚本 说test.txt有 话 言语 我希望它根据行的长度生成新的文本文件,并将行写入其中 4.txt 话 5.txt 言语 代码使用Python 3.8写入文件时出现权限错误,python,Python,我正在按单词的长度拆分一个大单词列表 我没有找到不同的方法,所以我决定用python为它编写一个脚本 说test.txt有 话 言语 我希望它根据行的长度生成新的文本文件,并将行写入其中 4.txt 话 5.txt 言语 代码 import os import sys basefile = open(sys.argv[1],'rt') print("Writing.....") os.mkdir(str(os.path.splitext(sys.argv[1])[0]))
import os
import sys
basefile = open(sys.argv[1],'rt')
print("Writing.....")
os.mkdir(str(os.path.splitext(sys.argv[1])[0]))
os.chdir(os.path.splitext(sys.argv[1])[0])
#print(basefile)
for line in basefile:
cpyfile=open(str(len(line.strip()))+'.txt',mode = 'a',encoding = 'utf-8')
cpyfile.write(line)
cpyfile.close()
print("Done")
basefile.close()
它适用于小文件,但对于较大的文件,它会在一段时间后发出错误
PermissionError: [Errno 13] Permission denied: '10.txt'
或
错误文件也是完全随机的,前面写的行也完全正常
我使用powershell和gitbash在windows上试用过它
非常感谢您的帮助,我怀疑您遇到了Windows不允许两个程序同时打开同一个文件的问题。我不确定第二个项目是什么。也许是病毒扫描器?你的程序在Ubuntu上使用/usr/share/dict/american english不做任何改动,所以我认为这可能是Windows的问题 在任何情况下,我认为您都可以通过在程序运行时保持文件打开来解决这个问题
import os
import sys
basefile = open(sys.argv[1], 'rt')
print("Writing.....")
os.mkdir(str(os.path.splitext(sys.argv[1])[0]))
os.chdir(os.path.splitext(sys.argv[1])[0])
# print(basefile)
files = {}
try:
for line in basefile:
cpyfilename = str(len(line.strip()))+'.txt'
cpyfile = files.get(cpyfilename)
if cpyfile is None:
cpyfile = open(cpyfilename, mode='a', encoding='utf-8')
files[cpyfilename] = cpyfile
cpyfile.write(line)
finally:
for cpyfile in files.values():
# Not strictly necessary because the program is about to end and
# auto-close the files.
cpyfile.close()
print("Done")
basefile.close()
你能检查一下文件权限吗?右键单击文件写入->属性->安全选项卡?这可能与不久前我在windows上遇到的类似问题相似。解决方法是进行几次重试,每次尝试之间增加停顿。它看起来不像许多与windows相关的问题。但它奏效了
import os
import sys
basefile = open(sys.argv[1], 'rt')
print("Writing.....")
os.mkdir(str(os.path.splitext(sys.argv[1])[0]))
os.chdir(os.path.splitext(sys.argv[1])[0])
# print(basefile)
files = {}
try:
for line in basefile:
cpyfilename = str(len(line.strip()))+'.txt'
cpyfile = files.get(cpyfilename)
if cpyfile is None:
cpyfile = open(cpyfilename, mode='a', encoding='utf-8')
files[cpyfilename] = cpyfile
cpyfile.write(line)
finally:
for cpyfile in files.values():
# Not strictly necessary because the program is about to end and
# auto-close the files.
cpyfile.close()
print("Done")
basefile.close()