184

私は python スクリプト parse.py を持っています。これはスクリプトで file1 などのファイルを開き、何かを実行して合計文字数を出力します。

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

現在、標準出力を使用して結果を出力ファイルに送信しています-出力

python parse.py >> output

ただし、このファイルを手動でファイルごとに実行したくありません。すべてのファイルを自動的に処理する方法はありますか? お気に入り

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

次に問題は、標準入力からファイル名を読み取るにはどうすればよいかということです。または、 ls を実行するための組み込み関数が既にいくつかあり、そのような作業を簡単に行うことができますか?

ありがとう!

4

6 に答える 6

411

オス

次を使用して、現在のディレクトリ内のすべてのファイルを一覧表示できますos.listdir

import os
for filename in os.listdir(os.getcwd()):
   with open(os.path.join(os.getcwd(), filename), 'r') as f: # open in readonly mode
      # do your stuff

グロブ

globまたは、モジュールを使用してファイル パターンに応じて、一部のファイルのみを一覧表示することもできます。

import glob
for filename in glob.glob('*.txt'):
   with open(os.path.join(os.getcwd(), filename), 'r') as f: # open in readonly mode
      # do your stuff

現在のディレクトリである必要はありません。必要なパスにリストできます。

path = '/some/path/to/file'
for filename in glob.glob(os.path.join(path, '*.txt')):
   with open(os.path.join(os.getcwd(), filename), 'r') as f: # open in readonly mode
      # do your stuff

パイプ または、指定したとおりにパイプを使用することもできますfileinput

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

そして、パイプでそれを使用できます:

ls -1 | python parse.py
于 2013-08-15T21:38:38.877 に答える
41

を使ってみてくださいos.walk

import os

yourpath = 'path'

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
于 2013-08-16T13:15:58.143 に答える
1

以下のコードは、実行中のスクリプトを含むディレクトリで使用可能なテキスト ファイルを読み取ります。次に、すべてのテキスト ファイルを開き、テキスト行の単語をリストに格納します。単語を保存した後、各単語を1行ずつ出力します

import os, fnmatch

listOfFiles = os.listdir('.')
pattern = "*.txt"
store = []
for entry in listOfFiles:
    if fnmatch.fnmatch(entry, pattern):
        _fileName = open(entry,"r")
        if _fileName.mode == "r":
            content = _fileName.read()
            contentList = content.split(" ")
            for i in contentList:
                if i != '\n' and i != "\r\n":
                    store.append(i)

for i in store:
    print(i)
于 2019-12-11T10:11:27.350 に答える