Donc, ce que je veux faire est essentiellement sucer une ligne de txt à partir d'un fichier .txt, puis attribuer les caractères à une liste, puis créer une liste de tous les caractères distincts dans une liste.
Donc, une liste de listes.
Pour le moment, j'ai essayé:
fO = open(filename, 'rU')
fL = fO.readlines()
et c'est tout im up to. Je ne sais pas trop comment extraire les caractères individuels et les assigner à une nouvelle liste.
Je veux faire quelque chose comme:
fL = 'FHFF HHXH XXXX HFHX'
^^^ c'est donc la ligne que j'ai tirée du fichier .txt.
Et puis le transformer en ceci:
['F', 'H', 'F', 'F', 'H' ...]
^^^ et cela étant la nouvelle liste, avec chaque caractère isolé.
Les chaînes sont itérables (comme une liste).
J'interprète que vous voulez vraiment quelque chose comme:
fd = open(filename,'rU')
chars = []
for line in fd:
for c in line:
chars.append(c)
ou
fd = open(filename, 'rU')
chars = []
for line in fd:
chars.extend(line)
ou
chars = []
with open(filename, 'rU') as fd:
map(chars.extend, fd)
les caractères contiendraient tous les caractères du fichier.
Vous pouvez le faire en utilisant liste :
new_list = list(fL)
Sachez que tous les espaces de la ligne seront inclus dans cette liste, à ma connaissance.
Je suis un peu en retard il semble être, mais ...
a='hello'
print list(a)
# ['h','e','l','l', 'o']
Donc, pour ajouter la chaîne hello
à une liste sous forme de caractères individuels, essayez ceci:
newlist = []
newlist[:0] = 'hello'
print (newlist)
['h','e','l','l','o']
Cependant, c'est plus facile à faire:
splitlist = list(newlist)
print (splitlist)
fO = open(filename, 'rU')
lst = list(fO.read())
a='hello world'
map(lambda x:x, a)
['Bonjour le monde']
Un moyen simple consiste à utiliser la fonction "map ()".
Ou utilisez une compréhension de liste sophistiquée, supposée être "plus efficace en calcul", lorsque vous travaillez avec de très gros fichiers/listes
fd = open(filename,'r')
chars = [c for line in fd for c in line if c is not " "]
fd.close()
Btw: La réponse qui a été acceptée ne tient pas compte des espaces blancs ...
Dans python beaucoup de choses sont éditables, y compris les fichiers et les chaînes. Itérer sur un gestionnaire de fichiers vous donne une liste de toutes les lignes de ce fichier. Une itération sur une chaîne vous donne une liste de tous les caractères de ce fichier. chaîne.
charsFromFile = []
filePath = r'path\to\your\file.txt' #the r before the string lets us use backslashes
for line in open(filePath):
for char in line:
charsFromFile.append(char)
#apply code on each character here
ou si vous voulez un one liner
#the [0] at the end is the line you want to grab.
#the [0] can be removed to grab all lines
[list(a) for a in list(open('test.py'))][0]
.
.
Edit: comme Agf le mentionne, vous pouvez utiliser itertools.chain.from_iterable
Sa méthode est meilleure, à moins que vous ne souhaitiez pouvoir spécifier les lignes à saisir list(itertools.chain.from_iterable(open(filename, 'rU)))
Cela nécessite toutefois de se familiariser avec les outils informatiques, et perd donc un peu de lisibilité.
Si vous voulez seulement parcourir les caractères, et ne vous souciez pas de stocker une liste, alors j'utiliserais les boucles for imbriquées. Cette méthode est aussi la plus lisible.
Python3.5 + permet l’utilisation de PEP 448 - Généralisations de décompression étendues :
>>> string = 'hello'
>>> [*string]
['h', 'e', 'l', 'l', 'o']
C'est une spécification de la syntaxe du langage, donc c'est plus rapide que d'appeler list
:
>>> from timeit import timeit
>>> timeit("list('hello')")
0.3042821969866054
>>> timeit("[*'hello']")
0.1582647830073256
Comme les chaînes sont des séquences (immuables), elles peuvent être décompactées de la même manière que des listes:
with open(filename, 'rU') as fd:
multiLine = fd.read()
*lst, = multiLine
Lorsque vous exécutez map (lambda x: x, multiLine), cela est nettement plus efficace, mais renvoie en fait un objet map au lieu d'une liste.
with open(filename, 'rU') as fd:
multiLine = fd.read()
list(map(lambda x: x, multiLine))
Transformer l'objet de la carte en liste prendra plus de temps que la méthode de décompression.