Python中的显式行连接

时间:2011-05-16 19:05:49

标签: python string

我正在逐行读取文件并进行一些文本处理,以便以某种格式输出 我的字符串处理代码如下:

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

有没有办法将这些物理线路连接成一条逻辑线路,例如:

ABCDEFGHI

基本上,我如何将多个字符串连接成一个大字符串?

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

4 个答案:

答案 0 :(得分:5)

有几种方法可以做到这一点。例如,只使用+就可以了。

“abc”+“def”#产生“abcdef”

如果您尝试连接多个字符串,可以使用join方法执行此操作:

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

如果您不想使用分隔符,请使用空字符串''.join()方法。

答案 1 :(得分:3)

稍微清理一下,最简单的方法是附加到数组然后返回结果

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('*'))])

是的,你当然可以读取一个足以溢出内存的文件。

答案 2 :(得分:2)

使用字符串添加

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

答案 3 :(得分:0)

我更愿意:

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(只要你真的需要)从字符串列表中创建一个字符串。