web-dev-qa-db-fra.com

Ouvrir le fichier par nom de fichier

J'ai un répertoire de fichiers texte qui ont tous l'extension .txt. Mon objectif est d’imprimer le contenu du fichier texte. Je souhaite pouvoir utiliser le caractère générique *.txt pour spécifier le nom du fichier que je souhaite ouvrir (je pense dans le sens de quelque chose comme F:\text\*.txt?), Diviser les lignes du fichier texte, puis imprimer le résultat.

Voici un exemple de ce que je veux faire, mais je veux pouvoir changer somefile lors de l’exécution de ma commande.

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

J'avais jeté un coup d'œil au module glob auparavant, mais je ne savais pas comment faire quoi que ce soit avec les fichiers. Voici ce que je suis venu avec, ne fonctionne pas. 

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,

Bien que vous ayez ignoré ma solution parfaitement parfaite, voici:

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

Vous pouvez utiliser le module glob pour obtenir une liste de fichiers pour les caractères génériques:

Fichier Wildcards

Ensuite, vous faites juste une boucle for sur cette liste et vous avez terminé:

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

Départ "glob - expansion du motif de chemin d'accès de style Unix"

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

2
dkamins

Ce problème vient juste pour moi et j'ai pu le résoudre avec du python pur:

Le lien vers la documentation python se trouve ici: 10.8. fnmatch - Correspondance de modèle de nom de fichier Unix

Citation: "Cet exemple imprimera tous les noms de fichiers du répertoire en cours avec l'extension .txt:"

import fnmatch
import os

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

Ce code explique les deux problèmes dans la question initiale: recherche le fichier .txt dans le répertoire actuel, puis permet à l'utilisateur de rechercher une expression à l'aide de l'expression régulière

#! /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
Andrzej Bułeczka