从列表中写入数据

时间:2018-10-01 20:59:57

标签: python

我正在学习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()

我该如何解决?我不需要这个问题的完整答案,而只是建议我如何获取已识别到文本文件中的“短列表字段”。

谢谢!

3 个答案:

答案 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。原因:在每次迭代中,您只需要在文件中添加一行,而无需打开文件,而在行中添加和关闭文件。因此,一次打开您的文件,执行您的工作,然后最后将其关闭。