明确的行连接在Python

问题描述:

我读文件,一行一行地,为了获得一定的格式输出做一些文字处理 我的字符串处理代码去如下:明确的行连接在Python

file1=open('/myfolder/testfile.txt') 
scanlines=file1.readlines() 
string = '' 

for line in scanlines: 
    if line.startswith('>from'): 
     continue 
    if line.startswith('*'): 
     continue 
    string.join(line.rstrip('\n')) 

的此代码的输出如下所示:

ABC

DEF

GHI

有没有办法将这些物理线路连接成一个逻辑行,e.g:

ABCDEFGHI

基本上,我怎么能连接多个字符串连接为一个大字符串?

如果我从一个文件中读取很长的字符串,是否存在通过将多条物理行连接成一条逻辑行而导致溢出的风险?

清理了一点东西,这将是最简单的追加到数组,然后返回结果

def joinfile(filename) : 
    sarray = [] 
    with open(filename) as fd : 
     for line in fd : 
      if line.startswith('>from') or line.startswith('*'): 
       continue 
      sarray.append(line.rstrip('\n')) 
    return ''.join(sarray) 

如果你想获得真正可爱的,你也可以做到以下几点:

fd = open(filename) 
str = ''.join([line.rstrip('\n') for line in fd if not (line.startswith('>from') or line.startswith('*'))]) 

当然你可以读一个足够大的文件来溢出内存。

+0

谢谢,数组方法或多或少地整理了我的问题!我可以问一下,因为我想用非常长的文件来处理这些文件,是否有办法解决溢出问题。我的字符串长度将达到几百个字符。 – Spyros 2011-05-16 19:49:38

+0

Python列表不是数组。他们是名单。另外,你不需要方括号。 – pillmuncher 2011-05-16 20:31:20

+0

@Spyros如果您可以将文件读入内存而不会遇到溢出......这些日子的文件大小为千兆字节。 – koblas 2011-05-16 20:47:27

使用字符串此外

>>> s = 'a' 
>>> s += 'b' 
>>> s 
'ab' 
+2

尽管如此,您不应该使用+ =连接许多字符串。每个+ =都会创建一个新的字符串。将它们收集到列表中并调用连接是正确的方法。 – Gurgeh 2011-05-16 19:49:31

+0

谢谢,我没有想过+ =技巧! – Spyros 2011-05-16 19:51:34

有几种方法可以做到这一点。例如只使用+应该做的伎俩。

“ABC” +“高清”#产生“ABCDEF”

如果你试图连接多个字符串,你可以使用join方法做到这一点:

', '.join(('abc', 'def', 'ghi')) # produces 'abc, def, ghi' 

如果你想没有分隔符,使用空字符串''.join()方法。

+0

谢谢你,''。join()函数将它整理出来,我把它们放到上面提到的koblas的数​​组中。 – Spyros 2011-05-16 19:50:42

我宁愿:

oneLine = reduce(lambda x,y: x+y, \ 
       [line[:-1] for line in open('/myfolder/testfile.txt') 
          if not line.startswith('>from') and \ 
           not line.startswith('*')]) 
  • line[:-1],以消除所有的\n
  • reduce第二个参数是一个列表理解,提取所有你感兴趣的线条和删除\n从行。
  • reduce(只是如果你真的需要的话)从字符串列表中创建一个字符串。