作为新手我需要你的帮助。当我试图在txt文件列表中重命名列时,我陷入了一个问题。在重命名它之前,我移除空间。
with open("smpl_list.txt", "r") as m, open ("smpl.txt","w") as n:
sys.stdout=n
for line in m:
print line.strip()导入熊猫以重命名列后
import pandas as pd
df=pd.read_csv("smpl.txt", sep=" ", header=None, names=["a","b","c","d"])
print (df)但我经常收到“关闭文件上的I/O操作”错误。如我所知,用块自动关闭文件,但问题在哪里,我真的看不见。
编辑:这里是我的工作代码,贡献了@COLDSPEED
with open("smpl_list.txt", "r") as m, open ("smpl.txt","w") as n:
for line in m:
n.write(line.strip()+"\n")以及重命名列的第二部分。
import pandas as pd
with open ("smp.txt", "w") as r:
df=pd.read_csv("smpl.txt", sep=" ", header=None, names=["a","b","c","d"])
print>> r, df列表的最后结果,它没有左空格(前面有)和列名。

发布于 2017-07-22 10:43:46
改变sys.stdout用打印重定向是错误的做法,因为你会造成不可逆转的损害。
发生此问题是因为您将其重新分配到上下文管理器中的文件指针。退出with块后,管理器将自动关闭,因此sys.stdout指向一个已关闭的文件,这就是您获得该错误的原因。
你有两个选择。第一个选项是通过重新加载sys来修复这个问题。你可以用
import imp
imp.reload(sys)第二个更好的选择(我更喜欢)是完全不进入这种情况。Python2 2的print语句有一个语法,允许您重定向而不必跳过循环:
with open("smpl_list.txt", "r") as m, open ("smpl.txt","w") as n:
for line in m:
print >> n, line.strip()或者,稍微好一点:
with open("smpl_list.txt", "r") as m, open ("smpl.txt","w") as n:
for line in m:
n.write(line.strip() + '\n')https://stackoverflow.com/questions/45253533
复制相似问题