web-dev-qa-db-fra.com

Lecture de plusieurs numéros d'un fichier texte

Je suis nouveau dans la programmation en python et j'ai besoin d'aide pour le faire.

J'ai un fichier texte avec plusieurs numéros comme celui-ci:

12 35 21
123 12 15
12 18 89

Je dois être capable de lire les nombres individuels de chaque ligne pour pouvoir les utiliser dans des formules mathématiques.

10
slayeroffrog

En python, vous lisez une ligne à partir d'un fichier sous forme de chaîne. Vous pouvez ensuite utiliser la chaîne pour obtenir les données dont vous avez besoin:

with open("datafile") as f:
    for line in f:  #Line is a string
        #split the string on whitespace, return a list of numbers 
        # (as strings)
        numbers_str = line.split()
        #convert numbers to floats
        numbers_float = [float(x) for x in numbers_str]  #map(float,numbers_str) works too

J'ai tout fait en plusieurs étapes, mais vous verrez souvent des gens les combiner:

with open('datafile') as f:
    for line in f:
        numbers_float = map(float, line.split())
        #work with numbers_float here

Enfin, leur utilisation dans une formule mathématique est également facile. Tout d'abord, créez une fonction:

def function(x,y,z):
    return x+y+z

Maintenant, parcourez votre fichier en appelant la fonction:

with open('datafile') as f:
    for line in f:
        numbers_float = map(float, line.split())
        print function(numbers_float[0],numbers_float[1],numbers_float[2])
        #shorthand:  print function(*numbers_float)
10
mgilson

Une autre façon de le faire consiste à utiliser la fonction numpy appelée loadtxt.

import numpy as np

data = np.loadtxt("datafile")
first_row = data[:,0]
second_row = data[:,1]

Si vous souhaitez utiliser le nom de fichier comme argument sur la ligne de commande, procédez comme suit:

    from sys import argv

    input_file = argv[1]
    with open(input_file,"r") as input_data:
        A= [map(int,num.split()) for num in input_data.readlines()]

    print A #read out your imported data

sinon vous pouvez faire ceci:

    from os.path import dirname

    with open(dirname(__file__) + '/filename.txt') as input_data:
        A= [map(int,num.split()) for num in input_data.readlines()]

    print A
0
Stefan Gruenwald

Cela devrait fonctionner si vous nommez votre fichier numbers.txt

def get_numbers_from_file(file_name):
    file = open(file_name, "r")
    strnumbers = file.read().split()
    return map(int, strnumbers)


print get_numbers_from_file("numbers.txt")

cela doit retourner [12, 35, 21, 123, 12, 15, 12, 18, 89] après que vous puissiez choisir individuellement tous les nombres avec list_variable [intergrer]

0
mou

Le code suivant devrait fonctionner

f = open('somefile.txt','r')
arrayList = []
for line in f.readlines():
    arrayList.extend(line.split())
f.close()
0
karpanai