Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python文件写入()未正确写入/格式化_Python - Fatal编程技术网

Python文件写入()未正确写入/格式化

Python文件写入()未正确写入/格式化,python,Python,我试图计算每个数字在文件中出现的次数,然后将原始数字及其计数打印到另一个文件中。原始数字按升序排序。计数足够接近,但问题是结束格式。不知怎的,它颠倒了我打印它们的顺序 这是我的代码: with open(filename) as f: prevLine=f.readline() out = open(outfile,'w') for line in f: if line == prevLine: curCount = curCoun

我试图计算每个数字在文件中出现的次数,然后将原始数字及其计数打印到另一个文件中。原始数字按升序排序。计数足够接近,但问题是结束格式。不知怎的,它颠倒了我打印它们的顺序

这是我的代码:

with open(filename) as f:
    prevLine=f.readline()
    out = open(outfile,'w')
    for line in f:
        if line == prevLine:
            curCount = curCount+1
        else:
            out.write("%s \t\t %d\n" % (prevLine , curCount))
            curCount =1
        prevLine=line
    out.close()
前几行应该如下所示:

1     7935
2     4455
3     2956
有7935个一,4455个二,2956个三。 但当我查看我创建的outfile新文件时,我得到了以下信息:

1
     7935
2
     4455

换行符应该在末尾,而不是在数字之间。为什么会发生这种情况?

您忘记了换行符\n in out。请写入%s\t\t%d\n%prevLine,curCount

此外,不建议在python中使用旧的printf格式。我个人更喜欢这个:str_output={prev_line}\t\t{current_count}\n.formatprev_line=prevLine,current_count=curCount

正如@mtadd的回答所说,使用rstrip从prevLine字符串中删除换行符

给予:

str_output="{prev}\t\t {cur_cnt}\n".format(prev=prevLine.rstrip(),cur_cnt=curCount) 
out.write(str_output)

您忘记了换行符\n输入输出。请写入%s\t\t%d\n%prevLine,curCount

此外,不建议在python中使用旧的printf格式。我个人更喜欢这个:str_output={prev_line}\t\t{current_count}\n.formatprev_line=prevLine,current_count=curCount

正如@mtadd的回答所说,使用rstrip从prevLine字符串中删除换行符

给予:

str_output="{prev}\t\t {cur_cnt}\n".format(prev=prevLine.rstrip(),cur_cnt=curCount) 
out.write(str_output)

如果在prevLine的末尾仍有换行符,请将写入行更改为以下内容:

out.write("%s \t\t %d\n" % (prevLine.rstrip() , curCount))

如果在prevLine的末尾仍有换行符,请将写入行更改为以下内容:

out.write("%s \t\t %d\n" % (prevLine.rstrip() , curCount))

在我看来,这就像是一个收藏品。柜台在这里会很有用…@mgilson哦,谢谢你的建议!我只是研究了一下,看起来容易多了。不幸的是,我有Python2.6.5,计数器不可用。我也不认为我可以更新它,因为我使用的是ArcGIS附带的Python版本。在ActiveState上通常有用于集合中各种子类的后端口。看,在我看来,它像一个收藏。柜台在这里会很有用…@mgilson哦,谢谢你的建议!我只是研究了一下,看起来容易多了。不幸的是,我有Python2.6.5,计数器不可用。我也不认为我可以更新它,因为我使用的是ArcGIS附带的Python版本。在ActiveState上通常有用于集合中各种子类的后端口。谢谢你指出这一点!虽然现在有了新行,我在它自己的行上得到了前一行的编号,然后在下一行是制表符和计数。还是有个问题!我将更新我的原始帖子,以准确地说明我的意思。我不认为建议使用字符串的printf格式,这是旧的python。而是尝试这个str_输出={prev_line}\t\t{current_count}\n.formatprev_line=prevLine,current_count=curCount。我已经更新了我的答案。哦,很高兴知道!不过,这似乎对格式设置毫无帮助。谢谢你指出这一点!虽然现在有了新行,我在它自己的行上得到了前一行的编号,然后在下一行是制表符和计数。还是有个问题!我将更新我的原始帖子,以准确地说明我的意思。我不认为建议使用字符串的printf格式,这是旧的python。而是尝试这个str_输出={prev_line}\t\t{current_count}\n.formatprev_line=prevLine,current_count=curCount。我已经更新了我的答案。哦,很高兴知道!不过,这似乎对格式设置毫无帮助。啊,太好了!这就解决了问题。谢谢如果要删除换行符,但在结尾保留其他空白,则可能需要使用rstrip“\n”。对于大多数文本格式,您并不真正关心尾随空格,但如果您关心尾随空格,那么就值得知道如何处理它。啊,太好了!这就解决了问题。谢谢如果要删除换行符,但在结尾保留其他空白,则可能需要使用rstrip“\n”。对于大多数文本格式,您并不真正关心尾随空格,但如果您关心,那么就值得知道如何处理它。