繁体   English   中英

子目录名称和文件名匹配时如何打开文件

[英]How to open files when subdirs name and file names match

我有这样的文件结构

\dir1
    \subdir1
        -file1.txt
        -file2.txt

    \subdir3
        -file2.txt
\dir2
    \subdir1
        -file1.txt
    \subdir2
        -file2.txt

dir2 subdirs名称与dir1中的名称匹配时,我想使用dir1作为参考目录并在dir2中打开文件。 所以基本上在\dir1\subdir1\file1.txt\dir2\subdir1\file1.txt中打开file1.txt并且也匹配文件名。

我可以遍历subdirs ,但找不到比较它们的逻辑

for path, subdirs, files in os.walk(path_to_json) :
    for file in subdirs :
        print (file)

我们应该怎么做?

如何打开与子目录中的模式匹配的文件

您只需将 dir1 替换为 dir2 即可创建路径,如果有这样的文件,则打开这两个文件。

import os

path = r"C:....dir1"
files_dir1 = []

# We make a list of all files in the directory dir1.

for root, dirs, files in os.walk(path):
    for file in files:
        files_dir1.append(os.path.join(root, file))

for name in files_dir1:
    name_dir2 = name.replace('dir1', 'dir2', 1)

    # Open files when a file with a new path exists.

    if os.path.isfile(name_dir2):
        with open(name, 'r') as f:
            print(name, f.read())

        with open(name_dir2, 'r') as f:
            print(name_dir2, f.read())

你可以尝试这样的事情:

from pathlib import Path

for file_1 in Path('dir1').rglob('*.*'):
    file_2 = Path('dir2', *file_1.parts[1:])
    if file_2.exists():
        print(str(file_1))
        print(str(file_2))

如果您只想将 go 用于txt -文件,则将.rglob('*.*')更改为.rglob('*.txt') 当有没有扩展名的文件时,您可以这样做:

for file_1 in Path('dir1').rglob('*'):
    if file_1.is_dir():
        continue
    file_2 = Path('dir2', *file_1.parts[1:])
    if file_2.exists():
        print(str(file_1))
        print(str(file_2))

如果您只想要第一个子级别的文件(正好是一个子目录深度),那么您可以尝试:

for file_1 in Path('dir1').glob('*/*.*'):
    file_2 = Path('dir2', *file_1.parts[1:])
    if file_2.exists():
        print(str(file_1))
        print(str(file_2))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM