在Python中逐行读取文件

时间:2018-11-13 14:54:19

标签: python python-3.x file io

我对Python很陌生。所以我正在尝试我的第一篇基本代码。所以我试图读取文件并在Python中逐行打印。这是我的代码:

class ReadFile(object):

    def main (self):

        readFile = ReadFile()
        readFile.printData()

    def printData(self):

        filename = "H:\\Desktop\\TheFile.txt"

        try:
            with open(filename, 'r') as f:
                value = f.readline()
                print(value)

            f.close()

        except Exception as ex:
            print(ex)

现在,当我运行它时,没有任何输出。所以我尝试调试它。我看到控件从一种方法跳转到另一种方法(主-> printData),然后存在。它在该方法内不执行任何操作。你能告诉我我在做什么错吗?我是新来的,所以对为什么代码表现为这种方式的一点见识也会很好。

4 个答案:

答案 0 :(得分:4)

如果这里的想法是要了解如何逐行读取文件,那么您要做的就是:

with open(filename, 'r') as f:
  for line in f:
    print(line)

通常将其放在try-except块中。

回到您的原始代码,我认为其中存在一些错误,这是由于对python中如何定义类/如何工作缺乏了解。

您编写该代码的方式表明,您可能来自Java背景。我强烈建议您进行Coursera或EdX提供的众多免费且非常好的在线python课程之一。


无论如何,这是我将使用类的方法:

class ReadFile:
    def __init__(self, path):
        self.path = path

    def print_data(self):
        with open(self.path, 'r') as f:
            for line in f:
                print(line)

if __name__ == "__main__":
    reader = ReadFile("H:\\Desktop\\TheFile.txt")
    reader.print_data()

答案 1 :(得分:1)

使用上下文管理器(带有open ....)时,您实际上并不需要类,也不需要try块或file.close。

请阅读有关在python中如何使用类的信息。一个函数可以做到这一点

def read():

    filename = "C:\\Users\\file.txt"
       with open(filename, 'r') as f:
          for line in f:
             print(line)

答案 2 :(得分:1)

这里有一些问题。

首先,您要声明一个类,然后再不使用它(从自身内部除外)。您需要在类之外创建该类的实例(或在其上调用类方法),以便对其进行实例化。

class ReadFile:
    def print_data(self):
        ...

# Create a new object which is an instance of the class ReadFile
an_object = ReadFile()
# Call the print_data() method on an_object
an_object.print_data()

现在,您实际上不需要使用类来解决此问题,因此您可以忽略所有这些,而只需使用printData方法中具有的代码即可

filename = "H:\\Desktop\\TheFile.txt"

try:
    with open(filename, 'r') as f:
        value = f.readline()
        print(value)

# don't need to do this, as f is only valid within the
# scope of the 'with' block
#    f.close()

except Exception as ex:
    print(ex)

您会发现这几乎可以满足您的要求。您只需要修改它即可打印整个文件,而不仅仅是第一行。在这里,我们不仅可以用f.readline()读一行,而且可以遍历f.readlines()的结果:

filename = "H:\\Desktop\\TheFile.txt"

try:
    with open(filename, 'r') as f:
        for value in f.readlines():  # read all lines
            print(value)

except Exception as ex:
    print(ex)

答案 3 :(得分:1)

您通常不将main方法放在类中。 Python与Java或C#不同。加载文件时,将执行类外的所有代码。

仅当您要将类和方法一起封装一些数据时,才创建类。在您看来,您根本不需要一类,但是如果您要一个类,则必须显式创建并调用它,例如:

class A:
    def __init__(self):
        print('constructor')

    def bang(self):
        print('bang')


# code outside of the class gets executed (like a 'main' method in Java/C#)
a = A()
a.bang()