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
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,
Vous pouvez utiliser le module glob pour obtenir une liste de fichiers pour les caractères génériques:
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,
Départ "glob - expansion du motif de chemin d'accès de style Unix"
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)
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)