^我通过python csv.wri被附加到管道csv

2024-09-28 20:58:47 发布

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

当我使用csv.writer将处理过的csv转储到stdin时,输出中会追加^M。他们为什么进来

writer = csv.writer(sys.stdout, delimiter=output_delimiter, quotechar=quotechar)
for row in csv.reader(open(args[0],"U"), delimiter=delimiter, quotechar=quotechar):
   writer.writerow(row)

如何调用cmd:

./csvcut -d ',' -q \" -f 2,4,5,6,7,8,9,10 data/listings.csv > data/extracted.csv

生成的文件(data/extracted.csv)是:

 name,host_name,neighbourhood_group,neighbourhood,latitude,longitude,room_type,price^M
 COZICOMFORT LONG TERM STAY ROOM 2,Francesca,North Region,Woodlands,1.44255,103.7958,Private room,83^M
 Pleasant Room along Bukit Timah,Sujatha,Central Region,Bukit Timah,1.33235,103.78521,Private room,81^M
 COZICOMFORT,Francesca,North Region,Woodlands,1.44246,103.79667,Private room,69^M
 Ensuite Room (Room 1 & 2) near EXPO,Belinda,East Region,Tampines,1.34541,103.95712,Private room,206^M
 B&B  Room 1 near Airport & EXPO,Belinda,East Region,Tampines,1.34567,103.95963,Private room,94^M
 Room 2-near Airport & EXPO,Belinda,East Region,Tampines,1.34702,103.96103,Private room,104^M
 3rd level Jumbo room 5 near EXPO,Belinda,East Region,Tampines,1.34348,103.96337,Private room,208^M

输入文件(data/listings.csv)是:

 1024986,Super Host Apartment,5643415,Martin,Central Region,River Valley,1.29349,103.83837,Entire home/apt,140,2,145,2019-08-22,2.04,1,230
 1060046,S$950/mth spacious room for short/long term lease,5748910,Sarah,West Region,Bukit Panjang,1.38123,103.76874,Private room,49,3,15,2019-06-01,0.20,2,131
 1078804,Cozy Studio Room,4602014,F,North-East Region,Hougang,1.36764,103.90228,Private room,31,30,60,2018-09-28,0.78,3,225
 1131162,Cozy Room at Bedok Reservoir,6205166,Lydia,East Region,Bedok,1.33729,103.9298,Private room,72,2,1,2017-04-01,0.03,1,360

Tags: csvdataprivateregionwriterroomdelimitereast
1条回答
网友
1楼 · 发布于 2024-09-28 20:58:47

通常,^M表示回车。它在不同的操作系统中以不同的符号表示。由于您正在写入stdout并将输出重定向到另一个文件,因此python假定一个\r\n回车值

对于*nix,回车用\n表示,而对于Windows,回车用\r\n表示^M是显示\r的文本编辑器

据我所见,您有以下选择:

  1. 以二进制模式直接写入文件(像here
  2. 用字符串替换替换输出文件中的^M(带unix2dosreplace()

相关问题 更多 >