在类方法中忽略循环

时间:2018-06-06 09:05:20

标签: python python-3.x

我有一个类来从类似表的文件中获取信息(比如csv文件,其中数据存储在行中,列用逗号分隔)。当我运行它时,行方法可以工作,但列的方法不适用。在调试时,for循环被传递,但是当我在方法之外测试代码时,它们可以工作。有没有想过它为什么会这样?

这里有部分代码(因为它应该返回列数,而不是返回0):

class DataSheet:
    def __init__(self, address):

        self.dataSheetFile = open(address, 'r')
        self.numberOfRows = self.getNumberOfRowsInFile()
        self.numberOfColumns = self.getNumberOfColumnsInFile()

    def getNumberOfRowsInFile(self):

        numberOfRows = 0
        for row in self.dataSheetFile:
            numberOfRows += 1
        return numberOfRows

    def getNumberOfColumnsInFile(self):

        numberOfColumns = 0
        for row in self.dataSheetFile:
            numberOfColumns = row.count(',') + 1
            break
        return numberOfColumns

    def getIndexRow(self, index):

        numberOfRows = 1
        for row in self.dataSheetFile:
            if numberOfRows == index:
                return row
            numberOfRows += 1

    def getIndexColumn(self, index):

        column = ''
        newLine = '\n'
        for row in self.dataSheetFile:
            column += row.split(',')[index-1] + newLine
        return column

dataSheet = DataSheet('address/DataSheet.txt')
print(dataSheet.numberOfColumns) # => 0

1 个答案:

答案 0 :(得分:1)

您正在重复打开两次打开的文件。但这样做是更改您打开的文件句柄。它有一个秘密的内部位置'它当前正在读取文件,在阅读完整个迭代器之后,你已经到了最后。

您可以在阅读后f.seek(0)重置该位置。