Python Append文件应使用新数据刷新

问题描述

我正在尝试将输出写入文件,我的代码正在执行的操作是,它查找匹配的文件名并将其存储到不匹配文件的相似文件中,但是问题是当我使用write时它会覆盖文件以及何时我在每次运行时都使用append,它会不断追加文件匹配的文件名。我需要的是,只要脚本运行,它就会刷新文件,并仅使用当前数据加载它。

    import re
    import sys
    import os
    import glob
    import pandas as pd
    import logging
    
    try:
        for file in glob.glob('*.csv'):
                r = re.search(r'abc_sales_(20[0-9][0-9])-([1-9]|1[0-2]|0[0-9])-([1-9]|1[0-9]|2[0-9]|3[0-1]|0[0-9])-[0-9]{2}_[a-z0-9]{3,5}.csv',file)
                if r:
                    #matched=file
                    print(f'File matched:{file}')
                    fp=open('bad_lines.txt','r+')
                    sys.stdout = fp
                
                else:
                    path=f'File not matched:{file}'
                    f=open('filenotmatched.txt','a')
                    f.seek(0)
                    f.truncate()
                    f.write(path+'\n')
                    f.close()
    except Exception as e:
        pass

解决方法

建议对代码进行更改。

import re
import sys
import os
import glob
import pandas as pd
import logging

# We create new 'bad_lines.txt' and 
# 'filenotmatched.txt' for each run
with open('bad_lines.txt','w') as f_badlines,open('filenotmatched.txt','w') as f_notmatched:
    try:
        for file in glob.glob('*.csv'):
                r = re.search(r'abc_sales_(20[0-9][0-9])-([1-9]|1[0-2]|0[0-9])-([1-9]|1[0-9]|2[0-9]|3[0-1]|0[0-9])-[0-9]{2}_[a-z0-9]{3,5}.csv',file)
                if r:
                    #matched=file
                    #print(f'File matched:{file}')
                    #fp=open('bad_lines.txt','r+')
                    # ** Not clear why you redirected 
                    # ** standard out to a file
                    # ** rather than writing to file directly
                    #sys.stdout = fp
                    f_badlines.write(f'File matched:{file}\n')
                else:
                    path=f'File not matched:{file}'
                    #f=open('filenotmatched.txt','a')
                    #f.seek(0)
                    #f.truncate()
                    #f.write(path+'\n')
                    #f.close()
                    f_notmatched.write(path + '\n')
    except Exception as e:
        pass