类方法中忽略For循环

2024-09-30 06:30:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类用于从类似表格的文件(比如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

Tags: 文件方法inselfforindexreturnaddress
1条回答
网友
1楼 · 发布于 2024-09-30 06:30:29

你在重复你打开两次的文件。但是这样做会改变你打开的文件句柄。它有一个秘密的内部“位置”,它当前正在读取文件,在读取整个迭代器之后,您已经到达了末尾

您可以在读取后执行f.seek(0)来重置位置

相关问题 更多 >

    热门问题