Как открыть каждый файл в папке?



у меня есть скрипт на 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 


тогда проблема в том, как я могу прочитать имя файла из стандартев?
или уже есть некоторые встроенные функции для выполнения ls и такой работы легко?



спасибо!

678   6  

6 ответов:

вы можете перечислить все файлы в текущем каталоге, используя:

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

вы должны попробовать использовать ОС.гуляй

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

вы можете просто использовать модуль ОС сделать так:

  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

теперь вы не только перечислили все файлы в папке, но и отсортировали их (необязательно) по имени запуска, типу файла и другим. Просто теперь повторите каждый список и сделайте свой материал.

Простое Решение

если вы хотите просто открыть все файлы в корневом каталоге. Я сталкивался с этой проблемой много раз, поэтому я создал простой в использовании модуль для Python 3.5 и Python 2.7. Если ваша версия Python не поддерживается просто спросите меня на GreyCadet IRC и я добавлю поддержку.

установка модуля

pip install filemapper

использование

рассмотрим структуру каталогов, как это и то main.py это ваш код.

-Program
    -resources
        nouns.txt
        config.dat
        help.txt
     main.py

содержание main.py

import filemapper as fm
all_files = fm.load('resources') # fm.load('resources','w') will open in write mode
for f in all_files:
    for i in fm.read(f):print i

это позволит распечатать строки каждого файла в папке ресурсов. Вы также можете пройти любой режим.

делать больше

если вы хотите сделать больше, чем просто открыть файлы с помощью этого модуля, то посетите filemapper Страница GitHub для более подробной информации.

Я искал этот ответ:

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 ' или другие концы вашего имени файла

import pyautogui
import keyboard
import time
import os
import pyperclip

os.chdir("target 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('')

Comments

    Ничего не найдено.