繁体   English   中英

如何将文件中的行加载到可以是字符串、浮点数或整数的变量中?

[英]How to load lines from a file into variables that can be either strings, floats, or ints?

我尝试使用int()str()但它给了我一个ValueError 我正在制作一个 RPG,您可以在其中使用文本文件保存和加载数据,我希望它从以前的游戏中获取数据(在文本文件中,已经实现)并从特定的行号设置变量,所以你得到你以前的数据。

我的代码是:

f = open(name+".txt",'r')
enter = f.readline()
y = enter[0]
hp = enter[1]
coins = enter[2]
status = enter[3]
y2 = enter[4]
y3 = enter[5]
energy = enter[6]
stamina = enter[7]
item1 = enter[8]
item2 = enter[9]
item3 = enter[10]
equipped = enter[11]
firstime = enter[12]
armorpoint1 = enter[13]
armorpoint2 = enter[14]
armorpoints = enter[15]
upgradepoint1 = enter[16]
upgradepoint2 = enter[17]
firstime3 = enter[18]
firstime4 = enter[19]
part2 = enter[20]
receptionist = enter[21]
unlocklist = enter[22]
armorlist = enter[23]
heal1 = enter[24]
heal2 = enter[25]
heal3 = enter[26]
unlocked = enter[27]
unlocked2 = enter[28]
f.close()

(我没有输入全局,因为它太长了。)当我运行它时,我收到一个错误,说索引超出范围。 如果您想更好地查看,该代码位于https://repl.it/@HamsterCoding/Screen-Testing#screen.py上。

假设您有以下 txt 文件:

1
word
2.5

您面临的第一个问题是文本文件中值的默认类型将是字符串。 因此,文件内容的分类会对您有所帮助。 下面的一段代码将实现这一点:

f = open('1.txt', 'r')
val_int = []
val_float = []
val_str = []
for i, line in enumerate(f):
    try:
        val = float(line)
        if val.is_integer():
            val_int.append((i,int(val)))
        else:
            val_float.append((i,val))
    except:
        val_str.append((i,line.replace('\n','')))
f.close()
print(val_int) # OUTCOME: [(0, 1)]
print(val_float) # OUTCOME: [(2, 2.5)]
print(val_str) # OUTCOME: [(1,'word')]

用于维护行索引以供将来使用的元组。

您的索引越界,因为 readline() 只读取一行。 您应该使用 readlines() 来获取文本文件中所有行的数组。

文件:

duck
1
c
1.2

代码:

f = open("duck.txt")
enter = f.readlines() # Changed from readline to readlines
y = enter[0].replace("\n", "") # .replace replaces all newlines ("\n") with empty strings
hp = enter[1].replace("\n", "")
coins = enter[2].replace("\n", "")
status = enter[3].replace("\n", "")
print(enter)
print(y)
print(int(hp)) # cast str to int
print(coins)
print(float(status)) # cast str to float

Output:

['duck\n', '1\n', 'c\n', '1.2']
duck
1 # int
c
1.2 # float

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM