【问题标题】:why open command doesn't allow me to open and read the file withou using 'with' command?为什么打开命令不允许我在不使用“with”命令的情况下打开和读取文件?
【发布时间】:2018-09-12 18:55:38
【问题描述】:

我是 Python 代码的初学者,遇到了一些相关的问题 解释 'with' 和 'with open' 命令之间的区别。

但由于我对 Python 3 缺乏了解,我仍然不明白两者之间的区别,也不知道如何让我的代码运行。

在我现在正在学习的教程中,答案如下。

import csv
import matplotlib.pyplot as plt
x=[]
y=[]
with open('example.txt', 'r') as csvfile:
    plot = csv.reader (csvfile, delimiter = ',')
    for row in plots:
        x.append(int(row[0]))
        y.append(int(row[1]))

plt.plot(x,y,label='file')
plt.show()

我尝试使用 open 和 csv.reader 命令,如下所示

import csv
import matplotlib.pyplot as plt
plotdata = open ('testing.csv') 
reader = csv.reader(plotdata, delimiter =',')
hx=[ ]
hy=[ ]
for x in reader:
    hx.append(reader[0])
    hy.append(reader[1])
plt.plot(hx, hy)

虽然第一个带有“with”命令的命令有效,但下面没有“with”命令的命令不起作用。以防万一我在最后添加了close() 命令但一直显示错误消息 "TypeError: '_csv.reader' 对象不可下标"

出了什么问题?

【问题讨论】:

    标签: python-3.x with-statement


    【解决方案1】:

    我认为问题在于在第二个代码中您直接订阅reader[0],否则在第一个代码中您订阅其迭代值(row in plots)转换为:int(row[0])

    这应该可行:

    for x in reader:
        hx.append(int(x[0]))
        hy.append(int(x[1]))
    plt.plot(hx, hy)
    

    【讨论】:

    • 非常感谢您的回答。它解决了我长达 4 小时的挣扎。
    • 等待@Soonk 操作
    【解决方案2】:

    我的想法如下:

    a) 在文件操作中始终使用with

    b) 除了练习之外,你将阅读数据和操作数据分开

    c) plot (bad name) 和 reader 是迭代器,在循环中您使用迭代器来获取 rowx,它们是迭代器提供的元素。 reader 本身不能被[0] 寻址,你一定想用x[0]x[1] 代替。

    【讨论】:

    • 非常感谢您的提示。我发现我做错了什么,并会尝试打开文件的方法。
    猜你喜欢
    • 2019-12-29
    • 2018-11-28
    • 2020-11-09
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    相关资源
    最近更新 更多