Python中的显式行连接

4

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

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

5

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

"abc" + "def" # 产生 "abcdef"

如果您想连接多个字符串,可以使用join方法:

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

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

谢谢,''.join() 函数解决了它,我按照 koblas 的建议将它们放入了一个数组中。 - Spyros

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

当然,您可以读取一个足够大的文件以溢出内存。


谢谢,数组方法或多或少解决了我的问题!我可以问一下,因为我想在具有非常长行的文件上执行此操作,是否有一种避免溢出问题的方法。我的字符串将达到几百个字符的长度.. - Spyros
Python的列表不是数组。它们是列表。此外,您不需要使用方括号。 - pillmuncher
@Spyros 如果你可以毫无问题地将文件读入内存中,那么你不太可能遇到溢出的情况...现在我们谈论的是大小为几千兆字节的文件。 - koblas
@pillmuncher 【来自维基百科】数组类型是一种数据类型,旨在描述由程序运行时计算的一个或多个索引选择的元素(值或变量)的集合。这样的集合通常称为数组变量、数组值或简单地称为数组。 - koblas
但在Python中,它仍然被称为列表。此外,“数组”一词具有一些与Python列表类型完全不同的内涵,例如:数组元素都是相同类型的,数组具有固定大小,数组可以具有多个维度等。对于Python列表来说,这些都不是真实的。 - pillmuncher

2
使用字符串拼接
>>> s = 'a'
>>> s += 'b'
>>> s
'ab'

2
不应该使用 += 来连接多个字符串。每个 += 都会创建一个新的字符串。将它们收集到列表中并调用 join 是正确的方法。 - Gurgeh

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(仅在实际需要时)将字符串列表合并为一个字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接