Python中的显式行连接

4 投票
4 回答
11730 浏览
提问于 2025-04-16 17:45

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

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 个回答

2

使用字符串相加

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

有好几种方法可以做到这一点。比如,直接用 + 就可以了。

"abc" + "def" # 结果是 "abcdef"

如果你想把多个字符串连接在一起,可以使用 join 方法:

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

如果你不想要任何分隔符,可以用空字符串 ''.join() 方法。

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

当然,你可以读取一个足够大的文件,这样就会超出内存的限制。

撰写回答