Python - l'Analyse des Colonnes et des Lignes
Je suis quelques difficultés avec l'analyse du contenu d'un fichier texte dans un tableau 2D/liste. Je ne peux pas utiliser intégré dans les bibliothèques, ont donc adopté une approche différente. C'est ce que mon fichier texte ressemble, suivie par mon code
1,0,4,3,6,7,4,8,3,2,1,0 2,3,6,3,2,1,7,4,3,1,1,0 5,2,1,3,4,6,4,8,9,5,2,1
def twoDArray():
network = [[]]
filename = open('twoDArray.txt', 'r')
for line in filename.readlines():
col = line.split(line, ',')
row = line.split(',')
network.append(col,row)
print "Network = "
print network
if __name__ == "__main__":
twoDArray()
J'ai couru ce code mais j'ai reçu ce message d'erreur:
Traceback (most recent call last):
File "2dArray.py", line 22, in <module>
twoDArray()
File "2dArray.py", line 8, in twoDArray
col = line.split(line, ',')
TypeError: an integer is required
J'utilise la virgule pour séparer les deux de ligne et de colonne comme je ne suis pas sûr de savoir comment je de différencier les deux - je suis confus au sujet de pourquoi il me dit qu'un entier est nécessaire lorsque le fichier est constitué d'entiers
OriginalL'auteur user612041 | 2011-02-18
Vous devez vous connecter pour publier un commentaire.
Pour répondre directement à votre question, il y a un problème avec la ligne suivante:
Si vous cochez la documentation de
str.split
, vous trouverez la description comme suit:Ce n'est pas ce que vous voulez. Vous n'êtes pas d'essayer de préciser le nombre de divisions que vous voulez faire.
Envisagez de remplacer votre boucle for et
network.append
avec ceci:row
sera effectivement['1', '0', '4', ..., '0\n']
... pas très utile.Vous avez raison, j'avais totalement oublié de faire la conversion d'entier. Grâce souligné.
OriginalL'auteur Wesley
Bien, je peux expliquer l'erreur. Vous êtes à l'aide de str.split() et son mode d'utilisation est:
str.split(séparateur, maxsplit)
Vous utilisez str.split(string, séparateur) et qui n'est pas valide appel à split. Voici un lien direct vers le Python docs pour cela:
http://docs.python.org/library/stdtypes.html#str.split
OriginalL'auteur Jeremy Whitlock
"""Je ne peux pas utiliser de bibliothèques intégrées""" -- pensez-vous vraiment dire "impossible", comme vous avez essayé d'utiliser le module csv et a échoué? Si oui, dites-le. Voulez-vous dire que "ne peut pas" comme il vous est interdit d'utiliser un module intégré par les termes de votre devoir à la maison? Si oui, dites-le.
Ici est une réponse qui fonctionne. Il ne laisse pas un retour à la ligne fixée à l'extrémité du dernier élément de chaque ligne. Il convertit les nombres int de sorte que vous pouvez les utiliser pour n'importe quel but que vous avez. Il corrige les erreurs, que personne d'autre ne l'a mentionné.
line.rsplit
Votre suggestion est de transformer l'un des effets secondaires de type int() dans une bidouille. Voir stackoverflow.com/questions/1001601/...
rsplit()
???rstrip()
!Merci. Fixe maintenant.
1 ") n'est pas une bidouille. La documentation indique que le nombre peut être incorporé dans les espaces docs.python.org/library/functions.html#int Il fonctionne sur toutes les implémentations de Python, je l'ai essayé et il est peu susceptible de changer.
OriginalL'auteur John Machin
Omg...
vous prenez
ou vous ont besoin d'une autre structure que la sortie? S'il vous plaît ajouter quoi avez-vous besoin de la sortie?
Peut-être que quelqu'un n'aime pas que vous utilisez
.readlines()
, l'utilisation trompeuse defilename
nom, et l'absence deint
de conversion.OriginalL'auteur seriyPS
OriginalL'auteur Hugh Bothwell
Le format d'entrée est simple, de sorte que la solution doit être simple:
csv
module n'est pas un avantage dans ce cas:Si vous avez besoin d'
float
au lieu deint
:Si vous travaillez avec
numpy
tableaux:Voir Pourquoi NumPy au lieu de Python listes?
Tous les exemples de produire des tableaux égale à:
OriginalL'auteur jfs
Lire les données à partir du fichier. Voici un moyen:
Analyser les données dans une table
Vous désirez peut-être la transposition de la place:
OriginalL'auteur BarryPye