"I/O操作关闭文件错误(Python2)"

2024-06-28 19:02:31 发布

您现在位置:Python中文网/ 问答频道 /正文

作为新手我需要你的帮助。我在尝试重命名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操作关闭文件”的错误。据我所知,用block自动关闭文件,但问题出在哪里,我真的一点也看不出来。你知道吗

编辑:这是我的代码,贡献为@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

列表的最终结果不带左空格(以前有)和列名

enter image description here


Tags: 文件txtdf列表foraswithline
1条回答
网友
1楼 · 发布于 2024-06-28 19:02:31

sys.stdout更改为对print执行重定向是错误的,因为这样会造成不可逆转的损害。你知道吗

发生此问题的原因是您将其重新分配给上下文管理器中的文件指针。退出with块后,管理器自动关闭,因此sys.stdout指向一个关闭的文件,这就是为什么会出现此错误。你知道吗

你有两个选择。第一种选择是通过重新加载sys来解决问题。你可以用它来做

import imp
imp.reload(sys)

第二个,也是更好的选择(我更喜欢)是根本不要陷入这种情况。Python2的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')

相关问题 更多 >