如何打开文件夹中的每个文件?
我有一个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模块来做到这一点:
- 列出文件夹中的所有文件
- 按文件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页面获取更多详细信息。