Открыть файл по имени файла - PullRequest
15 голосов
/ 16 февраля 2011

У меня есть каталог текстовых файлов с расширением .txt.Моя цель - распечатать содержимое текстового файла.Я хочу иметь возможность использовать подстановочный знак *.txt, чтобы указать имя файла, который я хочу открыть (я имею в виду что-то вроде F:\text\*.txt?), Разбить строки в текстовом файле и распечатать вывод.

Вот пример того, что я хочу сделать, но я хочу иметь возможность изменить somefile при выполнении моей команды.

f = open('F:\text\somefile.txt', 'r')
for line in f:
    print line,

Я ранее извлек модуль glob, но я не мог понять, как на самом деле сделать что-нибудь с файлами.Вот то, что я придумал, не работает.

filepath = "F:\irc\as\*.txt"
txt = glob.glob(filepath)

lines = string.split(txt, '\n') #AttributeError: 'list' object has no attribute 'split'
print lines

Ответы [ 5 ]

28 голосов
/ 16 февраля 2011
import os
import re
path = "/home/mypath"
for filename in os.listdir(path):
    if re.match("text\d+.txt", filename):
        with open(os.path.join(path, filename), 'r') as f:
            for line in f:
                print line,

Хотя вы проигнорировали моё совершенно прекрасное решение, вот, пожалуйста:

import glob
path = "/home/mydir/*.txt"
for filename in glob.glob(path):
    with open(filename, 'r') as f:
        for line in f:
            print line,
6 голосов
/ 16 февраля 2011

Вы можете использовать модуль glob для получения списка файлов для подстановочных знаков:

Файл подстановочных знаков

Тогда вы просто делаете цикл для этого списка, и все готово:

filepath = "F:\irc\as\*.txt"
txt = glob.glob(filepath)
for textfile in txt:
  f = open(textfile, 'r') #Maybe you need a os.joinpath here, see Uku Loskit's answer, I don't have a python interpreter at hand
  for line in f:
    print line,
2 голосов
/ 13 ноября 2017

Эта проблема только что возникла у меня, и я смог ее исправить с помощью чистого Python:

Ссылка на документы по Python находится здесь: 10.8.fnmatch - сопоставление с образцом имени файла Unix

Цитата: «В этом примере будут напечатаны все имена файлов в текущем каталоге с расширением .txt:«

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)
2 голосов
/ 16 февраля 2011

проверить "glob - расширение шаблона имени в стиле Unix"

http://docs.python.org/library/glob.html

0 голосов
/ 12 октября 2018

Этот код учитывает обе проблемы в начальном вопросе: ищет файл .txt в текущем каталоге, а затем позволяет пользователю искать какое-либо выражение с помощью регулярного выражения

#! /usr/bin/python3
# regex search.py - opens all .txt files in a folder and searches for any line
# that matches a user-supplied regular expression

import re, os

def search(regex, txt):
    searchRegex = re.compile(regex, re.I)
    result = searchRegex.findall(txt)
    print(result)

user_search = input('Enter the regular expression\n')

path = os.getcwd()
folder = os.listdir(path)

for file in folder:
    if file.endswith('.txt'):
        print(os.path.join(path, file))
        txtfile = open(os.path.join(path, file), 'r+')
        msg = txtfile.read()
search(user_search, msg)
...