我正在学习Python,并且需要练习:
编写一个程序,该程序将从文件中逐行读取并选择前三个字段(用空格分隔)。该程序应 编写一个名为error的文件,其中包含类似于Line的行 362没有3个字段,以标识那些没有3个字段 领域。然后,该程序应将 前三个字段,其形式为宽度为10的字符串,然后是 两个宽度为10的浮点数,每个浮点数在小数点后3位。在 如果这是不可能的,则字段应写为字符串 宽度10。
我已经完成了一半,但是我无法将列表项放入错误例外报告中。我没有收到任何错误消息;我只是得到一个空文件。
我的异常数据显示在Python中,但是缺少写入输出。
这是我的代码:
file = open("question3.txt",'r')
read = file.read()
file.close()
print(read)
#This is the list of sentences that form the list 'read'
#I need to analyse these list items.
array = read.splitlines()
print(array)
for item in array:
if(item.count(" "))<3:
exception = str(item)
f = open('error.txt','w')
f.write(exception)
print(exception)
f.close()
我该如何解决?我不需要这个问题的完整答案,而只是建议我如何获取已识别到文本文件中的“短列表字段”。
谢谢!
答案 0 :(得分:0)
您可以使用
for idx, item in enumerate(array):
跟踪行号,并写出更详尽的错误消息。
答案 1 :(得分:0)
默认情况下,open(file, 'w')
将使用名称文件删除任何现有文件并创建一个新文件。因此,也许您正确地遍历了这些行,但是在每个循环中,您调用open(file, 'w')
都会擦除所有行。一个简单的解决方法是将其移动到for循环之外
f = open('error.txt','w')
for item in array:
... #etc
或者您可以使用open(file, 'a')
这将追加到任何现有文件中,而不是重写它。有关更多详细信息,请参见Python Doc StackOverflow Post
答案 2 :(得分:0)
file = open("question3.txt",'r')
read = file.read()
file.close()
print(read)
array = read.splitlines()
print(array)
# 1) Open in append mode using 'a'
# 2) '+' tells python to create a file
# named error.txt if it does not exist.
# 3) Open file before initiating for loop
f = open('error.txt', 'a+')
for item in array:
if item.count(" ") < 3:
exception = str(item) + '\n' # Separate two exceptions with a newline
f.write(exception)
print(exception)
# Now close the file after for loop is done
f.close()
这应该有效。请注意,进入for循环之前必须先打开文件error.txt。原因:在每次迭代中,您只需要在文件中添加一行,而无需打开文件,而在行中添加和关闭文件。因此,一次打开您的文件,执行您的工作,然后最后将其关闭。