如何打开文件夹中的每个文件?

我有一个python脚本parse.py,在脚本中打开一个文件,比如说file1,然后做一些可能打印出来的字符总数。

filename = 'file1' f = open(filename, 'r') content = f.read() print filename, len(content) 

现在,我正在使用stdout将结果指向我的输出文件 – 输出

 python parse.py >> output 

但是,我不想通过手动文件来做这个文件,有没有办法自动照顾每一个文件? 喜欢

 ls | awk '{print}' | python parse.py >> output 

那么问题是我怎么能从standardin读取文件名? 还是已经有一些内置的function可以轻松完成ls和那些工作?

谢谢!

您可以使用以下命令列出当前目录中的所有文件:

 import os for filename in os.listdir(os.getcwd()): # do your stuff 

或者,您可以只列出一些文件,具体取决于使用glob模块的文件模式:

 import glob for filename in glob.glob('*.txt'): # do your stuff 

它不一定是当前目录,你可以在任何你想要的path中列出它们:

 path = '/some/path/to/file' for filename in os.listdir(path): # do your stuff for filename in glob.glob(os.path.join(path, '*.txt')): # do your stuff 

或者你甚至可以使用fileinput指定的pipe道

 import fileinput for line in fileinput.input(): # do your stuff 

然后使用它与pipe道:

 ls -1 | python parse.py 

你应该尝试使用os.walk

 yourpath = 'path' import os for root, dirs, files in os.walk(yourpath, topdown=False): for name in files: print(os.path.join(root, name)) stuff for name in dirs: print(os.path.join(root, name)) stuff 

你实际上可以使用os模块来做到这一点:

  1. 列出文件夹中的所有文件
  2. 按文件types,文件名等sorting文件

这是一个简单的例子:

 import os #os module imported here location = os.getcwd() # get present working directory location here counter = 0 #keep a count of all files found csvfiles = [] #list to store all csv files found at location filebeginwithhello = [] # list to keep all files that begin with 'hello' otherfiles = [] #list to keep any other file that do not match the criteria for file in os.listdir(location): try: if file.endswith(".csv"): print "csv file found:\t", file csvfiles.append(str(file)) counter = counter+1 elif file.startswith("hello") and file.endswith(".csv"): #because some files may start with hello and also be a csv file print "csv file found:\t", file csvfiles.append(str(file)) counter = counter+1 elif file.startswith("hello"): print "hello files found: \t", file filebeginwithhello.append(file) counter = counter+1 else: otherfiles.append(file) counter = counter+1 except Exception as e: raise e print "No files found here!" print "Total files found:\t", counter 

现在,您不仅可以列出文件夹中的所有文件,还可以(可选)按起始名称,文件types等进行sorting。 刚刚迭代每个列表,并做你的东西。

简易解决scheme

如果只想打开目录根目录下的所有文件。 我遇到过这个问题很多次,所以我为Python 3.5和Python 2.7创build了一个易于使用的模块。 如果您的Python版本不支持,只需在GreyCadet IRC上询问我,我将添加该支持。

安装模块

 pip install filemapper 

用法

考虑一下这样的目录结构,main.py就是你的代码。

 -Program -resources nouns.txt config.dat help.txt main.py 

main.py的内容

 import filemapper as fm all_files = fm.load('resources') # fm.load('resources','w') will open in write mode for f in all_files: for i in fm.read(f):print i 

这将打印出资源文件夹中每个文件的行。 你也可以通过任何模式。

做更多

如果您不想使用此模块打开文件,请访问filemapper GitHub页面获取更多详细信息。