我一直在寻找一种将这种方法拼凑在一起无法获胜的方法。我的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秒才能找到,打印和打开文件。这与我编码的方式有关吗?
答案 0 :(得分:0)
正如评论中所述,open
实际上并没有以您考虑的方式打开文件,它只是提示您对相关文件的引用。< / p>
要使用给定文件启动应用程序(在 Windows 上),您需要一个不同的功能:
os.startfile(filename)
@identicon链接问题的接受答案提到了一种不同的方法,恰好是跨平台的(使用os.subprocess
)。