Python:文件写入仅在 Linux 上添加无意的换行符
Python: File Writing Adding Unintentional Newlines on Linux Only
我正在使用 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 [=16=]" ";next;}1' output.csv
什么都不做。我已将它 运行 转移到我的 Windows 机器上,它仍然读取相同的内容。但是,当我将输出粘贴到 Steam 的聊天客户端时,它会按照我想要的方式将其连接起来。
提前致谢!
这就是问题所在
代码:
csvlist.write(line + ',' + medianstr + '\n')
这可以清除是你剥离 space
修改后的代码:
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
我正在使用 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 [=16=]" ";next;}1' output.csv
什么都不做。我已将它 运行 转移到我的 Windows 机器上,它仍然读取相同的内容。但是,当我将输出粘贴到 Steam 的聊天客户端时,它会按照我想要的方式将其连接起来。
提前致谢!
这就是问题所在
代码:
csvlist.write(line + ',' + medianstr + '\n')
这可以清除是你剥离 space
修改后的代码:
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