为什么我的循环在一次迭代后停止?

时间:2018-08-02 13:40:55

标签: 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=counter+1
    return counter,f.readlines()
            #f.close()
x=open_data("C:/Users/manchester/.ipynb_checkpoints/txt_sentoken/practice_")

基本上,我试图遍历目录中包含电影评论的所有文件。我的首要目标是使用一个函数从目录中读取所有文件,然后我需要说70%的评论用于培训10%的测试,10%的验证,10%的超参数采样。但是我无法克服尝试使用函数读取所有文件的第一个障碍。

我尝试使用列表和追加,但这也不起作用。

2 个答案:

答案 0 :(得分:0)

您不会读取所有文件,而是只打开同一变量中的所有文件,最后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 

以后编辑: 我有一个包含两个文件“ f1”和“ f2”的文件夹“ x”; “ 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'])

使用生成器,您将没有所有行的列表,但是有一个“可迭代”,可以将其称为“惰性读取器”,要使用它,您必须对其进行迭代

>>> for line in get_lines(".\\x"):
...    print line  # will give
1

2

3

4

5

6

数字之间的额外一行是{\n,它是从沿着打印品添加的\n打印的文件中读取的

答案 1 :(得分:0)

这样,代码将只返回目录的最后一个文件。

您没有对打开的文件执行任何操作,然后返回最后一个文件。

我想您应该将'Sheet 2'!B:E附加在列表中,然后在函数末尾返回列表。

虽然计数器应该可以工作,返回目录中的文件数