web-dev-qa-db-ja.com

ファイル名ワイルドカードでファイルを開く

すべて拡張子.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
24
greg
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,
35
Uku Loskit

Globモジュールを使用して、ワイルドカード用のファイルのリストを取得できます。

ファイルワイルドカード

次に、このリストに対してforループを実行するだけで完了です。

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,
8
Ocaso Protal

「glob — Unixスタイルのパス名パターン拡張」をチェックしてください

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

2
dkamins

この問題はちょうど私のために起こり、私はそれを純粋なpythonで修正することができました:

python docsへのリンクはここにあります: 10.8。fnmatch — Unixファイル名のパターンマッチング

引用:「この例では、拡張子が.txtの現在のディレクトリにあるすべてのファイル名を出力します。」

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)
1
rAntonioH

このコードは、最初の質問の両方の問題を説明します。現在のディレクトリで.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)
0