簡體   English   中英

來自文本文件的浮點數的python列表

[英]python list of floats from text file

我正在嘗試使用以下代碼從文本文件創建一個浮點數列表:

exam_data_file = open('exam_data.txt','r')
exam_data = exam_data_file.readlines()
exam_data1 = []

for line1 in exam_data_file:
    line1 = float(line1)
    exam_data1.append(line1)

 print(exam_data1)     

但輸出很簡單: []

有人可以幫忙嗎?!

現在無論我做了什么更改,我都會收到此錯誤消息:

line1 = float(line1)


ValueError: invalid literal for float(): 3.141592654
2.718281828
1.414213562
0.707106781
0.017453293

為什么不使用literal_eval n -(更容易使用)

您可以簡單地使用literal_eval讀取和打印簡單列表或多維列表

from ast import literal_eval

f=open("demofile.txt",'r')

for line in f:
    new_list = literal_eval(line)

print(new_list)
f.close()

https://stackoverflow.com/a/59717679/10151945這個答案是不相關的。 這是我做過的一個例子:

from ast import literal_eval
file=open("student_list.txt",'r')
for student in file:
    student_list_final = literal_eval(student)
print(student_list_final)
file.close()

for line1 in exam_data_file:

應該是這樣的:

for line1 in exam_data :

你指的是錯誤的對象

您的代碼中實際上有兩個問題:

  • 第一個問題是您實際上正在讀取文件兩次。 一個時間線 2 ( exam_data_file.readlines() ) 和第二個時間線 5,同時執行 for 循環。 您不能兩次讀取文件。 有關更多信息,請參閱此帖子

  • 第二個問題是line1當前是您文件中的整行(在您的情況下是一系列單獨的浮點數),而不是您預期的單個浮點數。 這就是您收到Invalid literal錯誤的原因。 您必須將其拆分為單獨的數字,以便對它們調用float 這就是為什么你必須調用字符串的split方法。

試試這個:

exam_data_file = open('exam_data.txt','r')
exam_data1 = []

for line in exam_data_file:
    exam_data1.extend([float(i) for i in line.split()])

print(exam_data1) 

輸出:

[3.141592654, 2.718281828, 1.414213562, 0.707106781, 0.017453293]

您在選擇要在 for 循環中迭代的錯誤時出錯。

for line1 in exam_data: # not the file!
    line1 = float(line1)
    exam_data1.append(line1)

這可以進一步改進

exam_data = []
with open('exam_data.txt','r') as open_file:
    for line1 in open_file:
        line1 = float(line1)
        exam_data.append(line1)

print(exam_data)

上下文處理程序(帶語法)將確保在處理完文件后關閉文件!

由於類文件對象是可迭代的,因此您可以只使用map

with open('exam_data.txt','r') as f:
    exam_data = map(float, f)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM