我对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),然后存在。它在该方法内不执行任何操作。你能告诉我我在做什么错吗?我是新来的,所以对为什么代码表现为这种方式的一点见识也会很好。
答案 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()