迭代和修改目录中的文件

2024-09-29 21:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经有代码可以修改程序所在目录中的一个.edi文件(testedifact.edi)。 但是,我需要在包含许多.edi文件的文件夹中运行脚本,因此我基本上希望将代码应用于每个文件

以下是我在一个文件中使用的内容:

segmentsNew = []
global segments     
with open( "testedifact.edi" , "r+") as edifactile:
    segments = edifactile.readlines()
    versionNumber = getVersionNumber(segments)
    for segment in segments:
        #do stuffs
edifactile.close()
with open ("testedifact.edi" , "w") as edifactfile:
    edifactile.writelines(segmentsNew)
edifactfile.close()

但我希望能够对该目录之外的文件以及网络驱动器上的文件执行此操作

我试着遍历我目录中的文件(作为一个小测试),并像这样将每个文件传递给“with open..

directory = os.listdir(r'C:\Users\name\test_edi_dir')
for file in directory:
    print("printing file names:", file)
    with  open(file, 'r') as edifactfile:
        pass

print(edifactfile.closed)

虽然它会打印文件名,但我还是得到了FileNotFoundError: [Errno 2] No such file or directory: 'testedifact - Kopie (10).edi'。。我做错了什么

有人能帮忙吗


Tags: 文件代码目录foraswithopendirectory
3条回答

file只包含文件名,而不包含文件存储的路径。你也需要通过这个考试

path = r'C:\Users\name\test_edi_dir/'
directory = os.listdir(path)

for file in directory:
    print("printing file names:", file)
    with open(path+file, 'r') as edifactile:
        pass

这是因为当您调用open(file, 'r')时,它试图在当前工作目录中打开一个文件

将代码更改为:

directory = os.listdir(r'C:\Users\name\test_edi_dir')
for file in directory:
    print("printing file names:", file)
    with  open('C:\Users\name\test_edi_dir\' + file, 'r') as edifactile:
        pass

    print(edifactfile.closed)

下一个问题是,一些文件实际上是目录,您的代码可能会失败,并出现以下错误:

traceback (most recent call last):
  File "<stdin>", line 3, in <module>
IOError: [Errno 21] Is a directory: '...'

因此,在打开该文件之前,您要检查该文件是否实际上是一个文件:

isFile = os.path.isfile('C:\Users\name\test_edi_dir\' + file)

最后,完整的代码是:

directory = os.listdir(r'C:\Users\name\test_edi_dir')
for file in directory:
    print("printing file names:", file)
    full_filename = 'C:\Users\name\test_edi_dir\' + file
    if os.path.isdir(full_filename):
         continue
    with  open(full_filename, 'r') as edifactile:
        pass

    print(edifactfile.closed)

看起来您必须通过整个图像路径:

with open('C:\Users\name\test_edi_dir\' + file, 'r') as edifactile:
    pass

相关问题 更多 >

    热门问题