Python问题:如何将两个变量的数据写入file1文件?
如何将提取的日志数据写入文件?
嘿,我看了你的代码,发现几个小问题导致你没法成功把数据写入file1,咱们一步步来修正:
先说说你代码里的核心问题:
file.write()方法只接受单个字符串参数,你直接传mydata1,mydata2两个参数会触发TypeError,得把它们拼接成一个字符串才行。- 你在循环内部用
'w'模式打开文件,这会每次循环都清空file1的内容,最后只会留下最后一次写入的数据,完全达不到累积存储的效果。 - 变量赋值的时机和逻辑有点模糊,要确保
mydata1和mydata2都拿到有效数据后再写入,避免写入空内容。
修正后的代码示例
下面是调整后的代码,我保留了你的核心逻辑,同时修复了写入文件的问题:
# 先初始化变量,避免未定义的报错 mydata1 = "" mydata2 = "" # 用嵌套with语句同时打开日志文件和输出文件,Python会自动帮你关闭文件 with open("testfile", "r") as log_fh, open('file1', 'w') as output_fh: for line in log_fh: if "ping" in line: # 这里假设HOST、Flag、hostname、logname都是你已经定义好的变量 if HOST != "NA" and Flag: mydata1 = hostname # 确保HOST不在mydata1时才赋值mydata2(逻辑你可以根据实际需求调整) if HOST not in mydata1: mydata2 = logname # 只有当两个变量都有有效内容时才写入 if mydata1 and mydata2: # 把两个变量拼接成字符串,用换行分隔(你可以改成空格/逗号等) output_fh.write(f"{mydata1}\n{mydata2}\n") # 如果需要分隔每组数据,可以加个分隔线 # output_fh.write("---\n")
关键调整说明:
- 嵌套with语句:同时打开日志文件和输出文件,不需要手动调用
close(),既安全又简洁。 - 字符串拼接:用f-string把
mydata1和mydata2拼成一个字符串,你可以根据需求调整分隔符(比如f"{mydata1}, {mydata2}\n")。 - 写入时机判断:增加
if mydata1 and mydata2的判断,避免写入空值或未定义的内容。 - 文件打开位置:把输出文件的打开操作移到循环外面,避免重复打开关闭,也不会每次清空文件。
如果你的需求是每次提取到数据就追加到文件末尾(而不是覆盖原有内容),只需要把输出文件的打开模式改成'a'即可:
with open("testfile", "r") as log_fh, open('file1', 'a') as output_fh: # 后续逻辑和上面一致
最后别忘了检查HOST、Flag、hostname、logname这些变量是否都正确定义,避免出现NameError哦~
内容的提问来源于stack exchange,提问作者Karn Kumar
相关产品推荐
相关产品推荐

