2012-10-16 37 views
10

Tôi mới dùng để lập trình bằng python và cần trợ giúp thực hiện việc này.Đọc nhiều số từ một tệp văn bản

Tôi có một tập tin văn bản với một vài con số như thế này:

12 35 21 
123 12 15 
12 18 89 

tôi cần phải có khả năng đọc các số riêng của mỗi dòng để có thể sử dụng chúng trong các công thức toán học.

+0

'[bản đồ (float, ln .split()) cho ln trong mở ("tên tập tin") nếu ln.strip()] ' –

Trả lời

9

Trong trăn, bạn đọc một dòng từ một tệp dưới dạng chuỗi. Sau đó bạn có thể làm việc với các chuỗi để có được dữ liệu bạn cần:

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 

tôi đã thực hiện tất cả trong một loạt các bước, nhưng bạn thường sẽ thấy những người kết hợp chúng:

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

Cuối cùng, sử dụng chúng trong một công thức toán học cũng dễ dàng. Đầu tiên, tạo một hàm:

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

Bây giờ lặp qua tập tin của bạn gọi hàm:

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) 
+0

điều này làm việc hoàn hảo, cảm ơn bạn – slayeroffrog

6

Một cách khác để làm điều đó là sử dụng numpy của chức năng gọi loadtxt.

import numpy as np 

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

này nên làm việc nếu bạn đặt tên cho tập tin của bạn 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") 

này phải trả lại [12, 35, 21, 123, 12, 15, 12, 18, 89] sau khi bạn có thể chọn individuly mỗi số với list_variable [intergrer]

0

Các mã sau đây nên làm việc

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

Nếu bạn muốn sử dụng tên tập tin như là đối số của bạn tại cửa sổ dòng lệnh, sau đó bạn có thể làm như sau:

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 

nếu không bạn có thể làm điều này:

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 
Các vấn đề liên quan