Открыть файл по имени файла
У меня есть каталог текстовых файлов, у которых есть расширение .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
Ответы
Ответ 1
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,
Ответ 2
Вы можете использовать модуль 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 answer, I don't have a python interpreter at hand
for line in f:
print line,
Ответ 3
Отъезд "glob - расширение шаблона пути в стиле Unix"
http://docs.python.org/library/glob.html
Ответ 4
Эта проблема возникла только для меня, и я смог исправить ее с помощью чистого python:
Ссылка на документы python находится здесь: 10.8. fnmatch - соответствие шаблону имени файла Unix
Цитата: "В этом примере будут напечатаны все имена файлов в текущем каталоге с расширением .txt:"
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print(file)