Python 2.7根据用户输入搜索目录并打开文件夹中的所有文件

时间:2017-08-07 03:26:40

标签: python python-2.7

我一直在寻找一种将这种方法拼凑在一起无法获胜的方法。我的python非常生疏,但我正在尝试写一个(我考虑的)简单程序而且我几乎是秃头。 此程序的目标是让某人输入零件号作为输入,即“ABC”,并在目录中搜索与该名称匹配的文件夹,然后打开该文件夹中的所有文件。这通常是.pdf和可能2-3个excel文件。通过使用open()来粘贴整个文件路径,我能够在测试时完成这项工作,但我希望它基于用户输入。当我运行下面的代码时,我看到它在正确的目录中找到了该文件(我创建了一个名为ABC.txt的文件进行测试),但不会打开它,因为它在文件名中添加了额外的.txt扩展名。

import os
import os.path
partno =""
partno = raw_input("Enter Part No:") #input from user to search dir
yourpath = r'C:\Python27' 
#All folders to be searched stem from one parent dir
print ("Loading Part No %r files...Please wait") % partno
for dname, _, fnames in os.walk(r'C:\Python27'):
    for fname in fnames:
        if partno in fname:
            filepath = (os.path.abspath(os.path.join(dname, fname)))
open (filepath,"r")
print filepath

这是我收到的输出...但它不会打开文件。

Enter Part No:ABC
Loading Part No 'ABC' files...Please wait
C:\Python27\Paperless Test\ABC\ABC.txt.txt

编辑:很抱歉我的电脑丢失,所以我使用远程桌面,忘记在断开连接后更新。

今天更新并完成了代码。现在完美地工作减去一个小问题,这不是一个主要问题,应该很容易解决。

以下是我的实际目录的更新代码。再次感谢所有帮助人员!

import os

partno =""
partno = raw_input("Enter Part No:") #Takes user input of Part No
yourpath = r"Y:\SHOP\MANUFACTURING DOCS" #Parent directory
print ("Loading Part No %r files...Please wait") % partno

for root, dirs, files in os.walk(yourpath, topdown=True):
    for name in dirs:
        if name == partno: #Matches folder in directory to `part no`
            path_to_files = (os.path.abspath(os.path.join(root, name)))
            #Stores path in variable so files are only found in this folder
            print path_to_files #Confirmation line for me 
for dname, _, fnames in os.walk(path_to_files, topdown=True):
    for fname in fnames:
        if fname.startswith(partno): 
            filepath = (os.path.abspath(os.path.join(dname, fname)))
            os.startfile(filepath) #Opens all files in folder in their 
            native applications
            print filepath
raise SystemExit

注意:当我运行它时,它会非常快速地找到并打印目录,但是当它运行程序的后半部分时,需要5-10秒才能找到,打印和打开文件。这与我编码的方式有关吗?

1 个答案:

答案 0 :(得分:0)

正如评论中所述,open实际上并没有以您考虑的方式打开文件,它只是提示您对相关文件的引用。< / p>

要使用给定文件启动应用程序(在 Windows 上),您需要一个不同的功能:

os.startfile(filename)

@identicon链接问题的接受答案提到了一种不同的方法,恰好是跨平台的(使用os.subprocess)。