ফোল্ডারে প্রতিটি ফাইল কীভাবে খুলবেন?


148

আমার কাছে পাইথন স্ক্রিপ্ট পার্স.পি রয়েছে, যা স্ক্রিপ্টে একটি ফাইল খুলবে, ফাইল 1 বলুন এবং তারপরে এমন কিছু করুন যা সম্ভবত অক্ষরের মোট সংখ্যা মুদ্রণ করে।

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

এই মুহুর্তে, আমি ফলাফলটি আমার আউটপুট ফাইল - আউটপুটে ডাইরেক্ট করতে ব্যবহার করছি out

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

অথবা আপনি 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
চার্লি, glob.glob এবং os.listdir ফাইলের নামগুলি ফিরিয়ে দেয়। তারপরে আপনি লুপের মধ্যে একে একে খুলবেন।
ডেভিড আর

সত্যিকারের সমাধান হওয়ার জন্য এই উত্তরের অন্তর্ভুক্ত করা উচিত যা আমি ভাবি। অন্যথায় উত্তরটি পূর্ব-বিদ্যমান "কীভাবে একটি ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করতে হবে" এর প্রশ্ন এবং প্রশ্ন এর এক
হ্যাক-আর

প্রথম এবং দ্বিতীয় সমাধানগুলি উইন্ডোজ ব্যবহারকারীদের জন্য তৃতীয় সমাধানটি কার্যকর হয়নি, উইন্ডোজ দেয়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
এটি পাইপারক্লিপ এবং পাইআউটোগুই ব্যবহার করে একটি ডিরেক্টরিতে প্রতিটি পিডিএফ খোলে, প্রিন্ট করে, বন্ধ করে। আশা করি অন্যরাও এটি সহায়ক হবেন।
রকওয়েলস

0

নীচের কোডটি ডিরেক্টরিটিতে যে কোনও পাঠ্য ফাইলের জন্য পড়ে যা এতে আমরা স্ক্রিপ্ট চালাচ্ছি contains তারপরে এটি প্রতিটি পাঠ্য ফাইল খোলে এবং পাঠ্য লাইনের শব্দগুলিকে একটি তালিকায় সংরক্ষণ করে। শব্দগুলি সংরক্ষণ করার পরে আমরা প্রতিটি শব্দের লাইন এক এক করে প্রিন্ট করি

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.