摆脱\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,为什么不使用内置模块,让它为您进行正确的解析呢?