it-swarm.com.de

Datei nach Dateiname als Platzhalter öffnen

Ich habe ein Verzeichnis von Textdateien, die alle die Erweiterung .txt haben. Mein Ziel ist es, den Inhalt der Textdatei auszudrucken. Ich möchte mit dem Platzhalter *.txt den Dateinamen angeben können, den ich öffnen möchte (ich denke dabei an etwas wie F:\text\*.txt?), Die Zeilen der Textdatei aufteilen und dann die Ausgabe drucken.

Hier ist ein Beispiel für das, was ich tun möchte, aber ich möchte somefile ändern können, wenn ich meinen Befehl ausführt.

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

Ich hatte vorher das Glob-Modul auscheckt, konnte aber nicht herausfinden, wie ich mit den Dateien etwas anfangen könnte. Hier ist das, worauf ich gekommen bin und nicht funktioniert. 

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

lines = string.split(txt, '\n') #AttributeError: 'list' object has no attribute 'split'
print lines
13
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,

Obwohl Sie meine perfekte Lösung ignoriert haben, können Sie loslegen:

import glob
path = "/home/mydir/*.txt"
for filename in glob.glob(path):
    with open(filename, 'r') as f:
        for line in f:
            print line,
24
Uku Loskit

Sie können das Glob-Modul verwenden, um eine Liste mit Dateien für Platzhalter zu erhalten:

Platzhalter für Dateien

Dann machen Sie einfach eine for-Schleife über diese Liste und Sie sind fertig:

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

Schauen Sie sich "Glob - Unix-Stil Pfadnamen Mustererweiterung" an.

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

2
dkamins

Dieses Problem kam gerade für mich und ich konnte es mit reinem Python beheben:

Einen Link zu den Python-Dokumenten finden Sie hier: 10.8. fnmatch - Unix-Dateinamensmusterabgleich

Zitat: "Dieses Beispiel druckt alle Dateinamen im aktuellen Verzeichnis mit der Erweiterung .txt:"

import fnmatch
import os

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

Dieser Code berücksichtigt beide Probleme in der ursprünglichen Frage: sucht nach der TXT-Datei im aktuellen Verzeichnis und ermöglicht dem Benutzer dann die Suche nach einem Ausdruck mit der Regex

#! /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