2017-08-07 22 views
0

我一直在寻找高和低的方式来拼凑到一起无济于事。我用我的蟒蛇很生锈,但我试图写一个(我认为)简单的程序,我几乎秃头。 此程序的目标是让某人输入零件编号作为输入,即“ABC”,并搜索与该名称匹配的文件夹的目录,然后打开该文件夹内的所有文件。这通常是一个.pdf,可能还有2-3个excel文件。我可以在使用open()进行测试的同时将整个文件路径粘贴进去,但我希望它基于用户输入。当我运行下面的代码时,我发现它找到了正确的目录中的文件(我创建了一个名为ABC.txt的文件进行测试),但无法打开它,因为它为文件名添加了额外的.txt扩展名。Python 2.7基于用户输入的搜索目录,并打开文件夹中的所有文件

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

正如评论中所述,open实际上并不是打开文件的方式,你只是在想你的方式,它只是给你一个参考文件的问题。

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

os.startfile(filename) 

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

相关问题