首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python将制表符分隔的txt文件转换为csv文件

使用Python将制表符分隔的txt文件转换为csv文件
EN

Stack Overflow用户
提问于 2012-04-19 09:24:34
回答 3查看 103.2K关注 0票数 23

所以我想把一个简单的制表符分隔的文本文件转换成csv文件。如果我使用string.split('\n')将txt文件转换为一个字符串,我会得到一个列表,其中每个列表项都是一个字符串,每列之间有一个'\t‘。我在想,我可以用逗号替换'\t‘,但它不会将列表中的字符串视为字符串,并允许我使用string.replace。这是我的代码的开头,它仍然需要一种方法来解析制表符"\t“。

代码语言:javascript
复制
import csv
import sys

txt_file = r"mytxt.txt"
csv_file = r"mycsv.csv"

in_txt = open(txt_file, "r")
out_csv = csv.writer(open(csv_file, 'wb'))

file_string = in_txt.read()

file_list = file_string.split('\n')

for row in ec_file_list:       
    out_csv.writerow(row)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-19 09:27:01

csv支持制表符分隔的文件。提供delimiter argument to reader

代码语言:javascript
复制
import csv

txt_file = r"mytxt.txt"
csv_file = r"mycsv.csv"

# use 'with' if the program isn't going to immediately terminate
# so you don't leave files open
# the 'b' is necessary on Windows
# it prevents \x1a, Ctrl-z, from ending the stream prematurely
# and also stops Python converting to / from different line terminators
# On other platforms, it has no effect
in_txt = csv.reader(open(txt_file, "rb"), delimiter = '\t')
out_csv = csv.writer(open(csv_file, 'wb'))

out_csv.writerows(in_txt)
票数 46
EN

Stack Overflow用户

发布于 2012-04-19 11:16:43

为什么在使用csv模块读取文件时应该始终使用'rb‘模式:

代码语言:javascript
复制
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

示例文件中的内容:任何旧垃圾,包括通过从数据库提取blobs或其他内容而获得的控制字符,或者在Excel公式中不当使用CHAR函数,或者...

代码语言:javascript
复制
>>> open('demo.txt', 'rb').read()
'h1\t"h2a\nh2b"\th3\r\nx1\t"x2a\r\nx2b"\tx3\r\ny1\ty2a\x1ay2b\ty3\r\n'

当Python以文本模式读取文件时,它遵循CP/M、MS-DOS和Windows:\r\n被识别为行分隔符并被用作\n,而\x1a也被识别为文件结束标记。

代码语言:javascript
复制
>>> open('demo.txt', 'r').read()
'h1\t"h2a\nh2b"\th3\nx1\t"x2a\nx2b"\tx3\ny1\ty2a' # WHOOPS

使用'rb‘打开文件的csv按预期工作:

代码语言:javascript
复制
>>> import csv
>>> list(csv.reader(open('demo.txt', 'rb'), delimiter='\t'))
[['h1', 'h2a\nh2b', 'h3'], ['x1', 'x2a\r\nx2b', 'x3'], ['y1', 'y2a\x1ay2b', 'y3']]

但文本模式不会:

代码语言:javascript
复制
>>> list(csv.reader(open('demo.txt', 'r'), delimiter='\t'))
[['h1', 'h2a\nh2b', 'h3'], ['x1', 'x2a\nx2b', 'x3'], ['y1', 'y2a']]
>>>
票数 1
EN

Stack Overflow用户

发布于 2018-10-12 20:55:14

我就是这么做的

代码语言:javascript
复制
import csv

with open(txtfile, 'r') as infile, open(csvfile, 'w') as outfile:
     stripped = (line.strip() for line in infile)
     lines = (line.split(",") for line in stripped if line)
     writer = csv.writer(outfile)
     writer.writerows(lines)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10220412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档