Как открыть каждый файл в папке?
У меня есть python script parse.py, который в script откройте файл, скажем 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
Тогда проблема в том, как я мог прочитать имя файла из стандартного?
или уже есть некоторые встроенные функции для облегчения работы ls и тех видов работы?
Спасибо!
Ответы
Ответ 1
Вы можете перечислить все файлы в текущем каталоге, используя:
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
Ответ 2
вам следует попробовать использовать 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
Ответ 3
На самом деле вы можете просто использовать модуль os, чтобы сделать оба:
- перечислить все файлы в папке
- сортировать файлы по типу файла, имени файла и т.д.
Вот простой пример:
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
Теперь вы не только перечислили все файлы в папке, но и отсортировали их (по желанию) по имени, типу файла и другим. Просто перебирайте каждый список и делайте свое дело.
Ответ 4
Я искал этот ответ:
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" или другие концы вашего имени файла.
Ответ 5
Простое решение
Если вы хотите просто открыть все файлы в корне каталога. Я много раз сталкивался с этой проблемой, поэтому создал простой в использовании модуль для 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
Это напечатает строки каждого файла в папке ресурсов. Вы также можете передать любой режим.
Выполнение большего
Если вы хотите сделать больше, чем просто открывать файлы с помощью этого модуля, обратитесь к файловому файлу странице GitHub для более подробной информации.
Ответ 6
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('')