【问题标题】:Python: Looping through files in a different directory and scanning dataPython:遍历不同目录中的文件并扫描数据
【发布时间】:2016-03-28 00:19:57
【问题描述】:

我很难遍历与编写脚本的目录不同的目录中的文件。理想情况下,我还希望我的脚本能够遍历所有以 sasa 开头的文件。文件夹中有几个文件,例如 sasa.1、sasa.2 等...以及其他文件,例如 doc1.pdf、doc2.pdf

我在 Windows Powershell 中使用 Python 2.7 版

一切的位置

1) Python 脚本位置例如:C:Users\user\python_project

2) Main_Directory 例如:C:Users\user\Desktop\Data

3) Current_Working_Directory 例如:C:Users\user\python_project

主目录包含 100 个文件夹(文件夹 A、B、C、D 等) 这些文件夹中的每一个都包含许多文件,包括感兴趣的 sasa 文件。

尝试运行脚本

对于 1 个文件,以下工作:

脚本运行方式如下:python script1.py

file_path = 'C:Users\user\Desktop\Data\A\sasa.1

def writing_function(file_path):
    with open(file_path) as file_object:
        lines = file_object.readlines()

for line in lines:
print(lines)

writing_function(file_path)  

但是,以下不起作用

脚本运行方式如下:python script1.py A sasa.1

import os
import sys
from os.path import join

dr = sys.argv[1]
file_name = sys.argv[2]

file_path = 'C:Users\user\Desktop\Data'
new_file_path = os.path.join(file_path, dr)
new_file_path2 = os.path.join(new_file_path, file_name)

def writing_function(paths):
    with open(paths) as file_object:
        lines = file_object.readlines()

for line in lines:
    print(line)

writing_function(new_file_path2)

我收到以下错误:

with open(paths) as file_object:
IO Error: [Errno 2] No such file or directory:
'C:Users\\user\\Desktop\\A\\sasa.1'

请注意,我现在只处理一个文件,我希望能够遍历文件夹中的所有 sasa 文件。

【问题讨论】:

  • 考虑使用os.walk

标签: python file loops directory


【解决方案1】:

可能是这样的:

import os
from os.path import join

def function_exec(file):
    code to execute on each file

for root, dirs, files in os.walk('path/to/your/files'): # from your argv[1]
    for f in files:
        filename = join(root, f)
        function_exec(filename)

避免使用变量dir。它是一个 python 关键字。试试print(dir(os))

dir_ = argv[1] # is preferable 

【讨论】:

  • 我只能传递 argv 中的文件夹名称还是必须传递整个文件路径?理想情况下,我只想将文件夹名称放在参数中,我可能会将代码中的整个路径一直到主文件夹,但我希望用户只需将文件夹名称放入包含文件。
  • 您可以使用os.path.join() 加入一个基本目录,例如您拥有数据的目录“2) Main_Directory ex:C:Users\user\Desktop\Data”和用户输入的目录。在docs.python.org/3/library/…查看文档
  • 如果目录是相对于你当前目录的,你也可以使用os.getcwd()获取它
  • 你好,我试图解决这个问题,但发现自己很不成功。我想知道你是否可以看看我更新的描述。谢谢
  • 你原来的路径,我认为在 C: 后面少了一个“\”,现在是 'C:Users...',不应该是 C:\Users...
【解决方案2】:

到目前为止没有人提到glob,所以: https://docs.python.org/3/library/glob.html

我认为您可以使用它的** 魔法解决您的问题:

如果递归为真,模式“**”将匹配任何文件和零 或更多目录和子目录。如果模式后面跟着 一个 os.sep,只有目录和子目录匹配。

【讨论】:

    【解决方案3】:

    另请注意,您可以使用更改目录位置

    os.chdir(path)
    

    【讨论】:

    • 我在将文件夹名称传递到目录时尝试使用 os.chdir(folder_name)。我如何在不知情的情况下通过整条路径?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多