web-dev-qa-db-ja.com

フォルダ内のすべてのファイルを開く方法

私はPythonスクリプトparse.pyを持っていて、それはスクリプトの中でfile1と言うようなファイルを開き、その後何かのことをして文字数の合計を表示します。

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

今は、stdoutを使って結果を自分の出力ファイルに出力しています - output

python parse.py >> output

ただし、このファイルを手動でファイルごとに作成したくない場合は、すべてのファイルを自動的に処理する方法はありますか。好き

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

それでは問題は、standardinからファイル名をどのようにして読み取ることができるかということです。それともlsやその種の作業を簡単にするための組み込み関数がありますか?

ありがとうございます。

115
B.Mr.W.

次のコマンドを使用して、現在のディレクトリにあるすべてのファイルを一覧表示できます。

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 = '/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を使って指定したようにパイプを使うことさえできます。

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

そして、それを配管で使用します。

ls -1 | python parse.py
286
Viktor Kerkez

あなたは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
28
le_vine

実際には osモジュール を使って両方を実行できます。

  1. フォルダ内のすべてのファイルを一覧表示する
  2. ファイルの種類、ファイル名などでファイルをソートします。

これは簡単な例です:

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

これで、フォルダ内のすべてのファイルが一覧表示されるだけでなく、それらを(オプションで)開始名、ファイルの種類などで並べ替えることもできます。ちょうど今各リストを反復し、あなたのものをしなさい。

7
geekidharsh

私はこの答えを探していました:

import os,glob
folder_path = '/some/path/to/file'
for filename in glob.glob(os.path.join(folder_path, '*.htm')):
  with open(filename, 'r') as f:
    text = f.read()
    print (filename)
    print (len(text))

あなたは同様にあなたのファイル名の '* .txt'または他の端を選ぶことができます

6
Andrei
import pyautogui
import keyboard
import time
import os
import pyperclip

os.chdir("target directory")

# get the current directory
cwd=os.getcwd()

files=[]

for i in os.walk(cwd):
    for j in i[2]:
        files.append(os.path.abspath(j))

os.startfile("C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe")
time.sleep(1)


for i in files:
    print(i)
    pyperclip.copy(i)
    keyboard.press('ctrl')
    keyboard.press_and_release('o')
    keyboard.release('ctrl')
    time.sleep(1)

    keyboard.press('ctrl')
    keyboard.press_and_release('v')
    keyboard.release('ctrl')
    time.sleep(1)
    keyboard.press_and_release('enter')
    keyboard.press('ctrl')
    keyboard.press_and_release('p')
    keyboard.release('ctrl')
    keyboard.press_and_release('enter')
    time.sleep(3)
    keyboard.press('ctrl')
    keyboard.press_and_release('w')
    keyboard.release('ctrl')
    pyperclip.copy('')
2
RockwellS