为了账号安全,请及时绑定邮箱和手机立即绑定

尝试将文本文件放入数组时,python 值错误预期 2 收到一个

尝试将文本文件放入数组时,python 值错误预期 2 收到一个

慕尼黑的夜晚无繁华 2024-01-15 21:15:47
我试图获取一些代码,该代码将查看一个文本文件并将行拆分为 2 个变量,但是当我运行此代码时,我收到错误 ValueError: 没有足够的值来解包(预期 2,得到 1), 代码是:x=0f = open("scores.txt","a")    f.write("\n")    f.write("andrew:78")    f.write("\n")    f.write("karen:64")    f.close    f = open("scores.txt","r")        a,b = ("karen:67").split(":")    print (a)    print(b)scores = [[],[]]while 0 != 1 :    line=(f.readline(x))    a,b = (line).split(":")    scores[0] = a        scores[1]=b这是文本文件,提前致谢
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

这 line=(f.readline(x))是类似的东西 (["content of file"]),即它是元组内列表中的文件内容。


您需要将其定义的大小x从 0 更改为某个值,或者不使用它。即 fromline = (f.readline(x))到line = f.readline()现在将是一个字符串。


现在您可以对字符串对象使用拆分操作。改成a, b = (line).split(':')_a, b = line.split(':')


所以新的代码将是


# opening/cretaing a file and adding data

with open("scores.txt", 'a') as f:   

    f.write("\n")    

    f.write("andrew:78")    

    f.write("\n")    

    f.write("karen:64")    



# creating a dictionary to save data of name and score respectively


scores = {'name':[], 'score':[]}


# again opening the file in read mode

with open("scores.txt", 'r') as f:

    data = f.readlines() # reading all line in file at single time

    for each_line in data: 

        if line.split(':'): # checking if each line has format <name>:<score> or not, if yes then add that data to scores dict

            name, score = line.split(':')

            scores['name'].append(name)

            scores['score'].append(score)


# seeing the result

print(scores)


查看完整回答
反对 回复 2024-01-15
?
慕森卡

TA贡献1806条经验 获得超8个赞

这段代码能达到你想要的效果吗?


with open("scores.txt", "a") as f:

    f.write(

        "\nandrew:78"

        "\nkaren:64"

    )


scores = []


with open("scores.txt", "r") as f:

    lines = f.readlines()

    for line in lines:

        if ":" in line:

            a, b = (line).split(":")


            scores.append({a: b})

您可能遇到错误,因为某些行(空白行)没有“:”,因此该行只是一个字符串,您试图将其解压缩为两个变量。


查看完整回答
反对 回复 2024-01-15
?
HUH函数

TA贡献1836条经验 获得超4个赞

它会在换行符 '\n' 之前打印出一个空字符 '' - 我认为你想要的是这样的:


lines = f.read().splitlines()

#This will only get the value for one line

scores[0], scores[1] = lines[0].split(':')


#Or to get both lines:

i=0

for line in f.read().splitlines():

    scores[i][0], scores[i][1] = line.split(':')

    i += 1


查看完整回答
反对 回复 2024-01-15
  • 3 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信