J'utilise le segment de code suivant pour lire un fichier en python:
with open ("data.txt", "r") as myfile:
data=myfile.readlines()
Le fichier d'entrée est:
LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE
Et quand j'imprime des données, je reçois
['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']
Comme je le vois, les données sont sous la forme list
. Comment puis-je le faire en chaîne? Et comment puis-je également supprimer les caractères "\n"
, "["
et "]"
?
24 réponses
Vous pouvez utiliser:
with open('data.txt', 'r') as file:
data = file.read().replace('\n', '')
Pour joindre toutes les lignes dans une chaîne et supprimer les nouvelles lignes que j'utilise normalement:
with open('t.txt') as f:
s = " ".join([x.strip() for x in f])
f = open('data.txt','r')
string = ""
while 1:
line = f.readline()
if not line:break
string += line
f.close()
print string
Vous pouvez également supprimer chaque ligne et concaténer dans une chaîne finale.
myfile = open("data.txt","r")
data = ""
lines = myfile.readlines()
for line in lines:
data = data + line.strip();
Cela fonctionnerait également très bien.
Vous pouvez lire à partir d'un fichier sur une seule ligne:
str = open('very_Important.txt', 'r').read()
Veuillez noter que cela ne ferme pas le fichier explicitement.
CPython fermera le fichier à sa sortie dans le cadre de la récupération de place.
Mais les autres implémentations de python ne le feront pas. Pour écrire du code portable, il est préférable d'utiliser with
ou de fermer le fichier explicitement. Court n'est pas toujours mieux. Voir https://stackoverflow.com/a/7396043/362951
Cela peut être fait en utilisant la méthode read ():
text_as_string = open('Your_Text_File.txt', 'r').read()
Ou comme le mode par défaut lui-même est «r» (lecture), utilisez simplement,
text_as_string = open('Your_Text_File.txt').read()
with open("data.txt") as myfile:
data="".join(line.rstrip() for line in myfile)
Join () joindra une liste de chaînes, et rstrip () sans argument supprimera les espaces, y compris les sauts de ligne, à la fin des chaînes.
Il est difficile de dire exactement ce que vous recherchez, mais quelque chose comme ça devrait vous aider à démarrer:
with open ("data.txt", "r") as myfile:
data = ' '.join([line.replace('\n', '') for line in myfile.readlines()])
Il s'agit d'une solution à copier-coller d'une ligne qui ferme également l'objet fichier:
_ = open('data.txt', 'r'); data = _.read(); _.close()
with open(player_name, 'r') as myfile:
data=myfile.readline()
list=data.split(" ")
word=list[0]
Ce code vous aidera à lire la première ligne, puis en utilisant l'option liste et fractionnement, vous pouvez convertir le premier mot de ligne séparé par un espace à stocker dans une liste.
Vous pouvez alors accéder facilement à n'importe quel mot, ou même le stocker dans une chaîne.
Vous pouvez également faire la même chose en utilisant une boucle for.
Cela fonctionne: changez votre fichier en:
LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE
Alors:
file = open("file.txt")
line = file.read()
words = line.split()
Cela crée une liste nommée words
qui est égale à:
['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']
Cela s'est débarrassé du "\ n". Pour répondre à la partie sur les crochets qui vous gênent, faites simplement ceci:
for word in words: # Assuming words is the list above
print word # Prints each word in file on a different line
Ou:
print words[0] + ",", words[1] # Note that the "+" symbol indicates no spaces
#The comma not in parentheses indicates a space
Cela renvoie:
LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN, GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE
L'expression régulière fonctionne aussi:
import re
with open("depression.txt") as f:
l = re.split(' ', re.sub('\n',' ', f.read()))[:-1]
print (l)
[«Je», «sentir», «vide», «et», «mort», «à l'intérieur»]
Je suis surpris que personne n'ait encore mentionné splitlines()
.
with open ("data.txt", "r") as myfile:
data = myfile.read().splitlines()
La variable data
est maintenant une liste qui ressemble à ceci lorsqu'elle est imprimée:
['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']
Notez qu'il n'y a pas de nouvelle ligne (\n
).
À ce stade, il semble que vous souhaitiez imprimer les lignes sur la console, ce que vous pouvez réaliser avec une boucle for:
for line in data:
print line
Dans Python 3.5 ou version ultérieure, en utilisant pathlib, vous pouvez copier contenu du fichier texte dans une variable et fermez le fichier sur une seule ligne:
from pathlib import Path
txt = Path('data.txt').read_text()
Puis vous pouvez utiliser str.replace pour supprimer les nouvelles lignes:
txt = txt.replace('\n', '')
Cela fait un moment que je bidouille avec et préfère utiliser read
en combinaison avec rstrip
. Sans rstrip("\n")
, Python ajoute une nouvelle ligne à la fin de la chaîne, ce qui dans la plupart des cas n'est pas très utile.
with open("myfile.txt") as f:
file_content = f.read().rstrip("\n")
print file_content
Utilisez read()
, pas readline()
:
with open('data.txt', 'r') as myfile:
data = myfile.read()
Pour supprimer les sauts de ligne à l'aide de Python, vous pouvez utiliser la fonction replace
d'une chaîne.
Cet exemple supprime les 3 types de sauts de ligne:
my_string = open('lala.json').read()
print(my_string)
my_string = my_string.replace("\r","").replace("\n","")
print(my_string)
Exemple de fichier:
{
"lala": "lulu",
"foo": "bar"
}
Vous pouvez l'essayer en utilisant ce scénario de relecture:
https://repl.it/repls/AnnualJointHardware
Essayez ce qui suit:
with open('data.txt', 'r') as myfile:
data = myfile.read()
sentences = data.split('\\n')
for sentence in sentences:
print(sentence)
Attention: Il ne supprime pas le \n
. C'est juste pour visualiser le texte comme s'il n'y avait pas \n
Je ne pense pas que quiconque ait répondu à la partie de votre question. Lorsque vous avez lu chaque ligne dans votre variable, car il y avait plusieurs lignes avant de remplacer le \ n par '', vous avez fini par créer une liste. Si vous avez une variable de x et l'imprimez juste en
X
Ou imprimer (x)
Ou str (x)
Vous verrez la liste entière avec les crochets. Si vous appelez chaque élément du (tableau de sortes)
X [0] puis il omet les crochets. Si vous utilisez la fonction str (), vous ne verrez que les données et non le '' non plus. str (x [0])
file = open("myfile.txt", "r")
lines = file.readlines()
str = '' #string declaration
for i in range(len(lines)):
str += lines[i].rstrip('\n') + ' '
print str
Avez-vous essayé cela?
x = "yourfilename.txt"
y = open(x, 'r').read()
print(y)
Python3: Google "liste compréhension" si la syntaxe du crochet est nouvelle pour vous.
with open('data.txt') as f:
lines = [ line.strip( ) for line in list(f) ]
Vous pouvez compresser cela en une à deux lignes de code !!!
content = open('filepath','r').read().replace('\n',' ')
print(content)
Si votre fichier se lit:
hello how are you?
who are you?
blank blank
Sortie python
hello how are you? who are you? blank blank
Vous pourriez peut-être essayer ça? J'utilise cela dans mes programmes.
Data= open ('data.txt', 'r')
data = Data.readlines()
for i in range(len(data)):
data[i] = data[i].strip()+ ' '
data = ''.join(data).strip()
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.