จะเปิดทุกไฟล์ในโฟลเดอร์ได้อย่างไร?


148

ฉันมี python script 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 ได้อย่างไร? หรือมีฟังก์ชั่นบิวท์อินบางตัวในการทำ ls และงานเหล่านั้นได้อย่างง่ายดาย?

ขอบคุณ!

คำตอบ:


348

Os

คุณสามารถแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันโดยใช้os.listdir:

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

glob

หรือคุณสามารถแสดงรายการไฟล์บางไฟล์เท่านั้นขึ้นอยู่กับรูปแบบไฟล์โดยใช้globโมดูล:

import glob
for filename in glob.glob('*.txt'):
   with open(os.path.join(os.cwd(), 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.cwd(), 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

2
สิ่งนี้จัดการกับการเปิดและปิดไฟล์โดยอัตโนมัติด้วยหรือไม่ ฉันประหลาดใจที่คุณไม่ได้ใช้with ... as ...:คำสั่ง คุณช่วยอธิบายได้ไหม
Charlie Parker

4
Charlie, glob.glob และ os.listdir คืนชื่อไฟล์ จากนั้นคุณจะเปิดทีละอันภายในลูป
David R

เพื่อให้เป็นทางออกที่แท้จริงคำตอบนี้ควรรวมถึงสิ่งที่ฉันคิดด้วย มิฉะนั้นคำตอบคือการล่อลวงของ "วิธีการแสดงรายการไฟล์ทั้งหมดในไดเรกทอรี" ที่มีอยู่แล้วก่อนหน้านี้ "Q and A's
Hack-R

โซลูชั่นที่หนึ่งและสองทำงานสำหรับผู้ใช้ Windowsโซลูชันที่สามไม่ทำงาน Windows ให้Permission Error: [Errno 13] Permission denied:
Roshna Omer

34

คุณควรลองใช้ 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

15

ฉันกำลังมองหาคำตอบนี้:

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' หรือส่วนท้ายอื่น ๆ ของชื่อไฟล์ของคุณ


นี่คือคำตอบเพราะคุณกำลังอ่านไฟล์ทั้งหมดในไดเรกทอรี D
Khan

10

คุณสามารถใช้โมดูลระบบปฏิบัติการเพื่อทำทั้งสองอย่าง:

  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

ตอนนี้คุณไม่เพียง แต่แสดงรายการไฟล์ทั้งหมดในโฟลเดอร์ แต่ยังมีไฟล์ (เป็นทางเลือก) เรียงตามชื่อเริ่มต้นประเภทไฟล์และอื่น ๆ ตอนนี้ทำซ้ำในแต่ละรายการและทำสิ่งที่คุณ


2
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('')

1
สิ่งนี้จะเปิดพิมพ์และปิดทุก PDF ในไดเรกทอรีโดยใช้ PyPerClip และ PyAutoGui หวังว่าคนอื่นจะเห็นว่าสิ่งนี้มีประโยชน์
RockwellS

0

รหัสด้านล่างจะอ่านไฟล์ข้อความใด ๆ ที่มีอยู่ในไดเรกทอรีซึ่งมีสคริปต์ที่เราใช้งานอยู่ จากนั้นจะเปิดทุกไฟล์ข้อความและเก็บคำของบรรทัดข้อความไว้ในรายการ หลังจากเก็บคำที่เราพิมพ์แต่ละคำแต่ละบรรทัด

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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.