2015-05-29 35 views
8

Tôi có một chương trình rất đơn giản. Mã này:Float phải là một chuỗi hoặc một số?

money = open("money.txt", "r") 
moneyx = float(money) 
print(moneyx) 

Các tập tin văn bản, money.txt, chỉ chứa này:

0.00 

Thông báo lỗi tôi nhận được là:

TypeError: float() argument must be a string or a number 

Nó rất có thể là một sai lầm đơn giản . Lời khuyên nào? Tôi đang sử dụng Python 3.3.3.

+2

Hãy thử: 'moneyx = float (money.read(). Strip())', Trên thực tế có thể có ký tự '\ n', nội bộ có thể trông giống như '0,00 \ n' và khi bạn thử 'float (" 0.0 \ n ")' nó gây ra lỗi. – ZdaR

+7

'tiền' là một tệp chứ không phải nội dung của tệp. Hãy thử 'float (money.read())' –

+0

Tuyệt vời. Cảm ơn sự giúp đỡ của bạn. –

Trả lời

9

money là một file object, không nội dung của tập tin. Để nhận nội dung, bạn phải read tệp. Nếu toàn bộ tệp chỉ chứa một số, thì read() là tất cả những gì bạn cần.

moneyx = float(money.read()) 

Nếu không, bạn có thể muốn sử dụng readline() để đọc một dòng đơn hoặc thậm chí cố gắng module csv để biết thêm các file phức tạp.

Ngoài ra, đừng quên close() tệp khi bạn hoàn tất hoặc sử dụng từ khóa with để tự động đóng.

with open("money.txt") as money: 
    moneyx = float(money.read()) 
print(moneyx) 
4

Tiền là một tệp, không phải là một chuỗi, do đó bạn không thể chuyển đổi toàn bộ tệp thành một phao. Thay vào đó bạn có thể làm một cái gì đó như thế này, nơi bạn đọc toàn bộ tập tin vào một danh sách, trong đó mỗi dòng là một mục trong danh sách. Bạn sẽ lặp lại và chuyển đổi nó theo cách đó.

money = open("money.txt", "r") 
lines = money.readlines() 
for l in lines: 
    moneyx = float(l) 
    print(moneyx) 
+0

bạn không cần phải sử dụng readlines, không có điểm xây dựng một danh sách để ném nó đi –

0

Thực tiễn tốt hơn là sử dụng "bằng" khi mở tệp bằng python. Bằng cách này, tập tin được ngầm đóng sau ca phẫu thuật được thực hiện

with open("money.txt", "r") as f: 
    content = f.readlines() 
    for line in content: 
     print float(line) 
+1

Nó cũng là thực hành tốt hơn không gọi readlines trừ khi bạn muốn một danh sách –

Các vấn đề liên quan