摆脱\r";在python中将文件转换为列表时
我有一个摆脱\r";在python中将文件转换为列表时,python,Python,我有一个Excel文件,如下所示: First_Name Initials Last_Name Places Email Tel Fax Joint Corresponding Experimental design Data generation Data processing Data analysis Statistical analysis Manuscript preparation Anna A Karenina BioInform
Excel
文件,如下所示:
First_Name Initials Last_Name Places Email Tel Fax Joint Corresponding Experimental design Data generation Data processing Data analysis Statistical analysis Manuscript preparation
Anna A Karenina BioInform_Harvard anna.Karenina@ucsf.edu 8885006000 8885006001 1 Y Y Y Y Y Y
Konstantin D Levin Neuro_Harvard Konstantin.levin@childrens.harvard.edu 8887006000 8887006001 1 Y Y Y
Alexei K Vronsky IGM_Columbia alexei.vronsky@cumc.columbia.edu 8889006000 8889006001 2 Y
Stepan A Oblonsky NIMH steoblon@mail.nih.gov 8891006000 8891006001 2 Y Y
在我的Python
code中,为了打开文件,我编写了如下代码:
with open(filename, 'r') as f:
for i in f:
i = i.rstrip().split("\t")
print(i)
结果列表如下所示。如何摆脱'\r'
?我尝试过各种方法,比如用“”替换“\r”,但这会弄乱列表中类似于'Y\rKonstantin'
的元素
['First_Name', 'Initials', 'Last_Name', 'Places', 'Email', 'Tel', 'Fax', 'Joint', 'Corresponding', 'Experimental design', 'Data generation', 'Data processing', 'Data analysis', 'Statistical analysis', 'Manuscript preparation\rAnna', 'A', 'Karenina', 'BioInform_Harvard', 'anna.Karenina@ucsf.edu', '8885006000', '8885006001', '1', '', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y\rKonstantin', 'D', 'Levin', 'Neuro_Harvard', 'Konstantin.levin@childrens.harvard.edu', '8887006000', '8887006001', '1', '', '', '', 'Y', 'Y', 'Y', '\rAlexei', 'K', 'Vronsky', 'IGM_Columbia', 'alexei.vronsky@cumc.columbia.edu', '8889006000', '8889006001', '2', '', '', 'Y', '', '', '', '\rStepan']
我可以很好地去除换行符,但我无法去除的是
'\r'
。正如建议的那样,csv
模块适合处理此类数据。我会这样做:
import csv
with open(filename) as fd:
inp = csv.reader(fd, delimiter='\t')
header = next(inp)
print(header)
for row in inp:
print(row)
Python支持magic,这意味着它默认使用“旧式”Mac行结尾。然后,您可以使用带有自定义分隔符的
csv
模块来解析以制表符分隔的文件正如建议的那样,csv
模块非常适合处理此类数据。我会这样做:
import csv
with open(filename) as fd:
inp = csv.reader(fd, delimiter='\t')
header = next(inp)
print(header)
for row in inp:
print(row)
Python支持magic,这意味着它默认使用“旧式”Mac行结尾。然后,您可以使用带有自定义分隔符的
csv
模块来解析以制表符分隔的文件需要注意的关键是,python只读取一行,其中嵌入了所有\r
字符。基于此,我猜您使用的是Python2.x,它在默认情况下没有启用模式。将您的模式更改为rU
应该可以实现您的期望:
with open(filename, 'rU') as f:
for i in f:
i = i.rstrip().split("\t")
print(i)
有关更多信息,请参阅文档。需要注意的关键是,python只读取一个包含所有
\r
字符的大行。基于此,我猜您使用的是Python2.x,它在默认情况下没有启用模式。将您的模式更改为rU
应该可以实现您的期望:
with open(filename, 'rU') as f:
for i in f:
i = i.rstrip().split("\t")
print(i)
有关详细信息,请参阅文档。为什么
rstrip
而不是strip
?请尝试执行'\rAlexei'.strip()
。另一方面,您可以使用map来转换列表中的所有字符串。您应该使用'\n\r'
i.rstrip(“\n\r”)
。另外f.read().striplines()
可以满足您的需求这看起来像一个TSV,为什么不使用内置模块,让它为您进行正确的解析?为什么rstrip
而不是strip
?尝试执行'\rAlexei.strip()
。另一方面,您可以使用map来转换列表中的所有字符串。您应该使用'\n\r'
i.rstrip(“\n\r”)
。另外f.read().striplines()
可以满足您的需要。这看起来像是一个TSV,为什么不使用内置模块,让它为您进行正确的解析呢?