无需csvwriter:如何将print语句写入CSV同时在Bash终端输出内容
解决方案
方法1:单独维护文件句柄(最直观)
不用修改全局的sys.stdout,直接打开一个文件对象专门写CSV,需要输出终端时就用默认的print:
# 打开CSV文件用于写入 csv_file = open("result.csv", "w") # 写入CSV的内容,指定file参数为文件对象 print("something", variable, file=csv_file) print("another_data", var2, file=csv_file) # 直接输出到Bash终端的内容,不用加file参数 print("这条信息会显示在终端里") # 写完记得关闭文件 csv_file.close()
方法2:保留原始终端输出流
如果习惯用重定向stdout的方式,可以先把原始的终端输出流保存下来,需要输出终端时指定用它:
import sys # 保存原始的终端输出流 original_stdout = sys.stdout # 重定向stdout到CSV文件 sys.stdout = open("result.csv", "w") print("something", variable) print("more_content", var3) # 切回终端输出,先关闭CSV文件,再恢复stdout sys.stdout.close() sys.stdout = original_stdout print("这条内容直接打印到Bash终端") # 若还要继续写CSV,重新打开并追加内容 sys.stdout = open("result.csv", "a") print("additional_data", var4) sys.stdout.close() sys.stdout = original_stdout
额外提醒
如果你的数据里包含逗号、双引号这类CSV特殊字符,直接用print写可能会导致格式错乱。虽然你不想用csvwriter,但如果涉及复杂内容,建议用Python内置的csv模块,它会自动处理转义问题。
内容的提问来源于stack exchange,提问作者abssyz
相关产品推荐
相关产品推荐

