繁体   English   中英

写功能在python中无法正常工作

[英]write function not working properly in python

我编写了代码以产生以下输出。 当我在代码中的标记行中使用追加功能时,它工作正常,但是当我使用“ w”写入功能时,它仅在新创建的文本文件中打印一行。 使用append函数的问题是,如果我们再次运行代码,它将两次复制相同的输出。 我无法理解这一点。 请先帮助谢谢

我使用的代码:

import os
with open("input5.csv", 'r+') as fd:
    lines = fd.readlines()
    fd.seek(0)
    fd.writelines(line for line in lines if line.strip())
    fd.truncate()

lines = open('input5.csv').readlines()
open('output1.txt', 'w').writelines(lines[1:-2])

with open('output1.txt', 'r+') as m:
    newText = m.read()
    while ',' in newText:
        newText = newText.replace(',', '_')
with open('output1.txt', "w") as m:
    m.write(newText)

with open("output1.txt","r+") as fp:
    for cnt, line in enumerate(fp):
        line=line.replace('_',',',3)
        print(line)
        f = open('output7.txt', 'a') #THIS LINE
        for i in range(len(line)):
            f.write((line[i]))
        f.close()
os.remove("output1.txt")

输入:

id,name,amount,subject
1,abc,55,"s1,s2,s3"
1,abc1,56,"s4,s5,s6"
1,abc2,57,"s7,s8,s9"
1,abc3,58,"s10,s11,s12"
1,abc4,59,"s13,s14,s15"
1,abc5,59,"s16,s17,s18"
1,abc6,59,"s13,s14,s15"
1,abc7,59,"s13,s14,s15"
1,abc8,59,"s13,s14,s15"
1,abc9,59,"s13,s14,s15"
this file is done
time taken; 22nd

预期输出:(这是我在使用附加功能标记的代码行时得到的代码)

1,abc,55,"s1_s2_s3"
1,abc1,56,"s4_s5_s6"
1,abc2,57,"s7_s8_s9"
1,abc3,58,"s10_s11_s12"
1,abc4,59,"s13_s14_s15"
1,abc5,59,"s16_s17_s18"
1,abc6,59,"s13_s14_s15"
1,abc7,59,"s13_s14_s15"
1,abc8,59,"s13_s14_s15"
1,abc9,59,"s13_s14_s15"

当我用标记的代码行中的write函数替换append时得到的输出:

1,abc9,59,"s13_s14_s15"

这样的事情(未经测试),打开和关闭文件不在循环中:

import os
with open("input5.csv", 'r+') as fd:
    lines = fd.readlines()
    fd.seek(0)
    fd.writelines(line for line in lines if line.strip())
    fd.truncate()

lines = open('input5.csv').readlines()
open('output1.txt', 'w').writelines(lines[1:-2])

with open('output1.txt', 'r+') as m:
    newText = m.read()
    while ',' in newText:
        newText = newText.replace(',', '_')
with open('output1.txt', "w") as m:
    m.write(newText)

with open("output1.txt","r+") as fp:
    f = open('output7.txt', 'w') #THIS LINE
    for cnt, line in enumerate(fp):
        line=line.replace('_',',',3)
        print(line)

        for i in range(len(line)):
            f.write((line[i]))
    f.close()
os.remove("output1.txt")

在使用python 3.6.7我的机器(Ubuntu 18.04)上,您的示例按预期工作。

output7.txt包含

1,abc,55,"s1_s2_s3"
1,abc1,56,"s4_s5_s6"
1,abc2,57,"s7_s8_s9"
1,abc3,58,"s10_s11_s12"
1,abc4,59,"s13_s14_s15"
1,abc5,59,"s16_s17_s18"
1,abc6,59,"s13_s14_s15"
1,abc7,59,"s13_s14_s15"

因此, write功能可以正常工作。 但是,这是一个很好的问题,为什么它对您不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM