【问题标题】:Python: File Writing Adding Unintentional Newlines on Linux OnlyPython:文件写入仅在 Linux 上添加无意的换行符
【发布时间】:2015-11-05 22:58:05
【问题描述】:

我使用的是 Python 2.7.9。我正在开发一个程序,该程序应该在每个循环的 .csv 文件中产生以下输出:

URL,number

这是我正在使用的代码的主循环:

csvlist = open(listfile,'w')

f = open(list, "r")
def hasQuality(item):
    for quality in qualities:
        if quality in item:
            return True
    return False

for line in f:
    line = line.split('\n')
    line = line[0]
    # print line
    itemname = urllib.unquote(line).decode('utf8')
    # print itemhash

    if hasQuality(itemname):
        try:
        looptime = time.time()
        url = baseUrl + line
            results = json.loads(urlopen(url).read())
            # status = results.status_code
            content = results
            if 'median_price' in content:
                medianstr = str(content['median_price']).replace('$','')
            medianstr = medianstr.replace('.','')
                median = float(medianstr)
                volume = content['volume']
                print url+'\n'+itemname
                print 'Median: $'+medianstr
                print 'Volume: '+str(volume)
                if (median > minprice) and (volume > minvol):
                    csvlist.write(line + ',' + medianstr + '\n')
                    print '+ADDED TO LIST'
            else:
                print 'No median price given for '+itemname+'.\nGiving up on item.'
        print "Finished loop in " + str(round(time.time() - looptime,3)) + " seconds."
    except ValueError:
        print "we blacklisted fool?? cause we skippin beats"
    else:
        print itemname+'is a commodity.\nGiving up on item.'

csvlist.close()
f.close()

print "Finished script in " + str(round(time.time() - runtime, 3)) + " seconds."

应该生成一个如下所示的列表:

AWP%20%7C%20Asiimov%20%28Field-Tested%29,3911 
M4A1-S%20%7C%20Hyper%20Beast%20%28Field-Tested%29,4202

但它实际上生成了一个如下所示的列表:

AWP%20%7C%20Asiimov%20%28Field-Tested%29
,3911
M4A1-S%20%7C%20Hyper%20Beast%20%28Field-Tested%29
,4202

每当它在 Windows 机器上运行时,我都没有问题。但是,每当我在我的 EC2 实例上运行它时,它都会添加额外的换行符。任何想法为什么?在文件上运行命令,如

awk 'NR%2{printf $0" ";next;}1' output.csv

什么都不做。我已将它转移到我的 Windows 机器上,但它仍然读取相同的内容。但是,当我将输出粘贴到 Steam 的聊天客户端时,它会以我想要的方式连接它。

提前致谢!

【问题讨论】:

  • 盲猜:检查您的输入文件是否使用 CRLF 作为行终止符,我不确定 \n 是否会遵守特定于操作系统的约定,并且您会看到一半的终止符进入Linux 上的输出。
  • 嗨!不幸的是,您无法删除问题文本;这使得答案毫无用处,并且不允许自我破坏。如果您确实需要,可以联系版主并要求将问题与您的帐户解除关联。

标签: python linux io newline


【解决方案1】:

这就是问题发生的地方

代码:

csvlist.write(line + ',' + medianstr + '\n')

如果你去掉空格,这个可以清除

修改代码:

csvlist.write(line.strip() + ',' + medianstr + '\n')

问题:

问题出在you are reading raw lines from the input file

Raw_lines 包含\n 表示每一行都不是最后一行,而最后一行则以给定字符结尾。

更多详情:

Just type print(repr(line)) before writing and see the output

【讨论】:

  • 编辑:我刚刚看到你更新的帖子。我会试试这个,让你知道。谢谢!
  • 这确实解决了它,@Vignesh。非常感谢!我快要疯了,试图找出问题所在。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
相关资源
最近更新 更多