我的输入是一个int元素列表,我将列表保存为文件(不多,不少),到目前为止工作正常。 但是当把文件作为我的int列表的输入时,我得到错误的列表元素或代码的错误。数字可以是任何(正数)int,它是偶数。
输入文件(通过键盘):
1, 2, 3, 4
文件内容:
[1, 2, 3, 4]
输入文件后列表:
['[1', '2', '3', '4]']
应该是:
[1, 2, 3, 4]
我文件中的filst元素需要再次为int。
l = list_from_file
a = 0
l [ 1 ] = 2
def take ( profil , s , succ) :
a = 0
j = 0
n = 0
erf = False
if s :
print ( "\nPut your list in." )# supposed to be a list
profil = [ int ( x ) for x in input ( ).split ( sep = ', ' ) ]
s = False
else :
profil = input ( "\nPut your list in. Again." ).split ( sep = ', ' )
erf = check( profil )
if not erf :
erf = ask ( profil , s , succ)
return profil , s
def check( profil ) :
a = 0
b = True
n = 0
for n in profil [ : ] :
# if int ( profil [ n ] ) < 0 : #Some confusing errors I tried to fix with these possibilities...
# if profil [ n ] < 0 :
if int ( n ) < 0 :
# if n < 0 :
b = False
exit
a += 1
a -= 1
if ( profil [ -1 ] != profil [ a ] ) :
b = False
return b
def ask( profil , s , succ) :
show( profil , succ)
s = check( profil )
if s :
profil = input ( "\nPut your list in." ).split ( sep = ', ' )
s = False
else :
profil = input ( "\nPut your list in. Again." ).split ( sep = ', ' )
# if profil [ 0 ] != 0 :
# s = ask
return succ, s
def save( profil , path) :
path = input ( "Put your path in: " )
erf = False
if os.path.isfile ( path) :
inp= input ( "File already exists. Overwrite[u], bring as input [e] or ignore[i]?" )
if inp== 'u' or inp== 'U' :
f = open ( path, "w" )
f.write ( str ( profil ) )
elif inp== 'e' or inp== 'E' :
f = open ( path, "r" )
profil = f.read ( ).split ( sep = ', ' )
elif inp== 'i' or inp== 'I' :
f = open ( path, "r" )
print ( "File closed." )
f = f.close
else :
inp= input ( "Confusing input. Continue with any key." )
return profil
else :
print ( "File made." )
f = open ( path, "w" )
f.write ( profil )
f = f.close
return profil
def bring( path, profil ) :
path= input ( "\nPath: " )
f = open ( path, "r" )
profil = f.read ().split ( sep = ', ' )
# profil = [ int ( x ) for x in input ( ).split ( sep = ', ' ) ]
# profil = profil ().read().replace ( '[' , '' )
# profil = f.read [ : ].replace ( ']' , '' )#also some variants I tried.
f = f.close
# profil = strrep ( profil )#new function I tried to
print (profil)
return profil
def delete ( path, succ) :
erf = False
path= input ( "Put in deleting path." )
if os.path.isfile ( path) :
os.remove ( path)
print ( "File " + path+ " deleted." )
erf = True
else :
print ( "Datei nicht gefunden." )
return erf
inp = input("Please start.")
while ( inp != 'q' ) and ( inp != 'Q' ) :
elif inp == 'N' :
inp = input ( "and now?" )
elif inp == 'p' or inp == 'P' :
profil , s = take ( profil , s , succ )
succ = zeigen ( profil , succ )
if profil [ 0 ] == '0' :
print ( "Profil not usable.." )
else :
inp = input ( "and now?" )
elif inp == 'z' or inp == 'Z' :
succ = show ( profil , succ )
inp = 'N'
elif inp == 's' or inp == 'S' :
profil = save ( profil , path )
inp = 'N'
elif inp == 'e' or inp == 'E' :
profil = bring( path , profil )
print(profil )
dif = profil [ 0 ]
inp = 'N'
elif inp == 'l' or inp == 'L' :
succ = delete ( path , succ )
inp = 'N'
else :
inp = input ( "unknown command. Quit with Q..." )
if ( inp == 'q' ) or ( inp == 'Q' ) :
quit ( )
答案 0 :(得分:1)
这里有几种选择。
将每个数字保存在自己的行而不是实际列表中,然后将文件读取为整数列表:
with open(filename) as f:
list_of_ints = [int(line.strip()) for line in f]
如果您坚持按原样将列表写入文件,则可以使用literal_eval(不使用eval
):
from ast import literal_eval
with open(filename) as f:
list_of_ints = literal_eval(f.read().strip())
请记住我使用strip()
来删除可能的前导/尾随空格和/或换行符。
答案 1 :(得分:0)
如果要将列表保存到文件中,并假设list_from_file是已读取的字符串表示形式。使用ast来评估列表。
getElementById