为什么打开命令不允许我使用“ with”命令打开和读取文件?

时间:2018-09-12 18:55:39

标签: python-3.x with-statement

我是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'对象不可下标”

怎么了?

2 个答案:

答案 0 :(得分:0)

我的想法如下:

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

b),除了练习之外,您还可以读取数据和处理数据

c)plot(坏名)和reader是迭代器,在循环中,您消耗迭代器以获得rowx,它们是迭代器提供的元素。 reader本身无法解决[0]的问题,您必须要使用x[0]x[1]来代替。

答案 1 :(得分:0)

我认为问题在于,在第二个代码中您直接预订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)