2015-09-03 33 views
0

我已经开始学习Python和我stucked一个任务 - 我有10个文本文件,我试图从他们写出两个输出: 输出1应该看起来像 文件夹和文件头 文件夹和文件头 的名字的名字......Python 2.7输出文本文件没有最后一个空白行

输出2应该像 文件夹和文件的名称|文字|文字|文字 文件夹和文件名|文字|文字|文本 ...

虽然我看了很多问题,但我还没有发现,如何删除(或不写)最后一个空行 - 应该总是只有文本。 我试过的所有解决方案(tell(),rstrip(),...)都删除了新行的所有符号,所以我有文件夹和文件头文件夹的名称以及文件头的名称,如 。 Ufortunatelly因为任务的定义,我只允许使用水珠和再,如此有用SYS被禁止我:(

我会很感激有你的帮助,这个任务对我来说是真正艰难的,但现在我做的不知道如何继续:)

感谢您的任何意见,并有一个愉快的一天;)

代码我使用:

import re, glob 
    file_list = glob.glob('./input/*txt') 
    for file_name in file_list: 
    input_file = open(file_name, 'r') 
    output_1 = open('file_1', 'a') 
    output_2 = open('file_2', 'a') 
    for line in input_file: 
    if re.search(r'\s{2,}\S{4,}\s{1}\S+:.*', line): 
        output_2.write(file_name.replace('.txt','|') + line) 
      if re.search(r'\s{3,}\S{3,16}\s+X?\s[A-Z]{3,4}\d?\s+\d{1,3}.*', line): 
        field = re.findall('\S{3,16}\s{3,}', line) + re.findall('\s{2}\d{1,3}.*', line) 
        field_join = '|'.join(field) 
        field_clear = re.sub(r'(\s){2,}', '', field_join) 
        field_list = re.sub(' ', '|', field_clear, 1) 
        output_1.write(file_name.replace('.txt','|') + field_list + '\n') 
    output_2.close() 
    output_1.close() 
    input_file.close() 
+0

你说rstrip不行?你把结果保存在一个变量中吗?这不是一个就地功能。 – ollien

+0

@ollien - 是的,我试过了,不幸没有成功 – dreammy

回答

1

在循环的开始只是continue(马上去

for line in input_file: 
    if not line.strip(): 
     continue 
    # etc 

编辑:对于只有最后一个行,如果它是空白:不执行任何代码),如果它是一个空行,下一个循环周期

input_file = input_file.readlines() 
last_iter = len(input_file) - 1 
for idx, line in enumerate(input_file): 
    if idx == last_iter and not line.strip(): 
     break 

或者循环之前:

input_file = input_file.readlines() 
if not input_file[-1].strip(): 
    input_file = input_file[:-1] 
+0

问题是只消除**最后**行,不是每个空行 – hd1

+0

@ hd1编辑它。 –

+0

你走了,有一个upvote – hd1

相关问题