为了账号安全,请及时绑定邮箱和手机立即绑定

Python - 遍历不同文件夹中的文件

Python - 遍历不同文件夹中的文件

摇曳的蔷薇 2022-07-26 22:03:07
我想从嵌套在子文件夹中的多个文件中提取数据。例如文件夹结构A/B/C/D.datA/B/E/F.datA/B/G/H.dat我想出的代码是:import osvalues = 2doc = []rootdir = 'C:/A/B'for subdir, dirs, files in os.walk(rootdir):    for file in files:        if file.endswith('.dat'):            with open (file, 'rt') as myfile:                    current_line = 0                    for mylines in myfile:                            if current_line == values:                                doc.append()                                break                            current_line += 1            continueprint(doc)我努力解决的错误:...with open (file, 'rt') as myfile:IOError: [Errno 2] No such file or directory: 'D.dat'
查看完整描述

4 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

错误是由于缺少完整的文件路径。因此,您需要确保“A/B/C/D.dat”应该存在于您尝试作为 myfile 打开的文件中。


您可以将以下代码段添加到您的逻辑中以实现它。


for subdir, dirs, files in os.walk(rootdir):

    for file in files:

        filepath=subdir+'/'+file


查看完整回答
反对 回复 2022-07-26
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

尽管您的解决方案不是最干净的。你得到的错误来自

            with open (file, 'rt') as myfile:

应该替换为

            with open (subdir + "/" + file, 'rt') as myfile:


查看完整回答
反对 回复 2022-07-26
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

听起来您正在寻找子目录中所有 .dat 文件的第三行。使用 pathlib.Path,您可以通过几个简单的步骤完成很多工作。


from pathlib import Path

doc = []

line_number_of_each_file = values = 2


for file in Path('C:/A/B').rglob('*.dat'):

    doc.append(file.readtext().splitlines()[line_number_of_each_file])


print(doc)


查看完整回答
反对 回复 2022-07-26
?
侃侃无极

TA贡献2051条经验 获得超10个赞

我有一个类似的问题。我的文件结构是这样的:


project

|__dir1

|  |__file_to_read.txt

|

|__dir2

   |__file_reader.py

为了真正找到另一个文件,我必须走出一个目录,到我.py文件的父目录。我最初使用此代码:


import os


current_path = os.path.dirname(__file__)


file_to_read = os.path.relpath('project/dir1/file_to_read', current_path)

这对我有用,但后来我换了一个不同的版本。原因不是您需要担心的任何原因,除了显然下一个模块比os.


from pathlib import Path


parent = Path.cwd().parent

file_to_read = Path(f'{parent}/project/dir1/file_to_read.txt').resolve()

也许这会更可取,因为它更强烈推荐给我。我希望这对您的问题有所帮助。


查看完整回答
反对 回复 2022-07-26
  • 4 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号