Python 为什么我的循环在一次迭代后停止?
我很难理解为什么我的循环在一次迭代后停止 我的代码:Python 为什么我的循环在一次迭代后停止?,python,python-2.7,file,loops,directory,Python,Python 2.7,File,Loops,Directory,我很难理解为什么我的循环在一次迭代后停止 我的代码: import os def open_data(fpath): counter=0 for i in os.listdir(fpath): if os.path.isfile(os.path.join(fpath,i)): #print counter f=open(os.path.join(fpath,i),"r") #counter=
import os
def open_data(fpath):
counter=0
for i in os.listdir(fpath):
if os.path.isfile(os.path.join(fpath,i)):
#print counter
f=open(os.path.join(fpath,i),"r")
#counter=counter+1
return counter,f.readlines()
#f.close()
x=open_data("C:/Users/manchester/.ipynb_checkpoints/txt_sentoken/practice_")
基本上,我正在尝试循环浏览目录中包含电影评论的所有文件。我首先打算使用一个函数读取目录中的所有文件,然后我需要获取70%的评论用于培训10%用于测试10%用于验证10%用于超参数样本。但我无法克服第一个障碍,即使用函数读取所有文件
我尝试过使用list和append,但这也不起作用。你没有读取所有文件,你只是在打开所有文件,在同一个变量中,最后当你执行
f.readlines()
f
这只是你的上一个文件,你应该在“缓冲区”中读取所有文件,并在最后返回它
应该是这样的
def open_data(fpath):
counter=0
all_lines = []
for i in os.listdir(fpath):
if os.path.isfile(os.path.join(fpath,i)):
all_lines += open(os.path.join(fpath,i),"r").readlines()
counter=counter+1
return counter,all_lines
请记住,读取大量最终会在内存中累积的大文件,如果代码允许,最好使用生成器
def get_lines(fpath):
for i in os.listdir(fpath):
if os.path.isfile(os.path.join(fpath,i)):
for line in open(os.path.join(fpath,i),"r"):
yield line
# this would give you an iterable over all the lines in all the files, one line at a time
稍后编辑:
我有一个文件夹“x”,其中有两个文件“f1”和“f2”;“f1”包含数字1、2、3,每行一个,而“f2”包含数字4、5、6
>>> print open_data(".\\x") # gives
(2, ['1\n', '2\n', '3\n', '4\n', '5\n', '6\n'])
使用生成器时,您不会得到所有行的列表,而是一个“iterable”,您可以将其称为“lazy reader”,为了使用它,您必须对其进行迭代
>>> for line in get_lines(".\\x"):
... print line # will give
1
2
3
4
5
6
数字之间的额外一行是从沿着
\n
打印的文件中读取的\n
打印添加这样,代码只返回目录的最后一个文件
您没有对打开的文件执行任何操作,然后返回最后一个文件
我想您应该在列表中附加f.readlines
,然后在函数末尾返回列表
不过,计数器应该可以工作,返回目录中的文件数为什么您认为循环只在一次迭代后停止?这个循环的运行次数应该与给定位置中的文件数量相同,但您永远不会知道,因为您放弃了除最终迭代结果之外的所有内容。不确定这是否是问题所在,但在打开它之后,您永远不会关闭
f
。这似乎是学习一些基本调试的好时机。您应该查看循环内和循环后不同变量和术语的值,以查看您的代码实际在做什么。问题与机器学习无关-请不要垃圾邮件标记(已删除)