हर फाइल को फोल्डर में कैसे खोलें?


148

मेरे पास एक पायथन स्क्रिप्ट है parse.py, जो स्क्रिप्ट में एक फ़ाइल खोलती है, फ़ाइल 1 कहती है, और फिर कुछ ऐसा करती है जो शायद वर्णों की कुल संख्या का प्रिंट निकालती है।

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 

फिर समस्या यह है कि मैं मानक से फ़ाइल नाम कैसे पढ़ सकता हूं? या ls और उन तरह के काम आसानी से करने के लिए पहले से ही कुछ अंतर्निहित कार्य हैं?

धन्यवाद!

जवाबों:


348

ओएस

आप वर्तमान निर्देशिका में सभी फाइलों को सूचीबद्ध कर सकते हैं 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मॉड्यूल का उपयोग करके फ़ाइल पैटर्न के आधार पर केवल कुछ फ़ाइलों को सूचीबद्ध कर सकते हैं :

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 ...:बयानों का उपयोग नहीं कर रहा हूँ । क्या आप स्पष्ट कर सकते हैं?
चार्ली पार्कर

4
चार्ली, ग्लोब.ग्लोब और ओएस.लिस्टर्डिर ने फिल्म के नाम वापस किए। आप लूप के भीतर एक-एक करके उन सभी को खोलेंगे।
डेविड आर

एक सही समाधान होने के लिए इस उत्तर को शामिल करना चाहिए जो मुझे लगता है। अन्यथा उत्तर पूर्व-मौजूदा का एक द्वैध है "निर्देशिका में सभी फ़ाइलों को कैसे सूचीबद्ध करें" क्यू और ए
हैक-आर

विंडोज उपयोगकर्ताओं के लिए पहला और दूसरा समाधान काम करता है तीसरा समाधान काम नहीं करता है, विंडोज देता हैPermission Error: [Errno 13] Permission denied:
रोशना ओमर

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' या अन्य छोरों को भी चुन सकते हैं


यह उत्तर है क्योंकि आप एक निर्देशिका में सभी फ़ाइलों को पढ़ रहे हैं; डी
खान

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
यह खोलता है, प्रिंट करता है, PyPerClip और PyAutoGui का उपयोग करके एक निर्देशिका में हर पीडीएफ को बंद कर देता है। आशा है दूसरों को यह मददगार लगे।
रॉकवेल्स

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.