明确的行连接在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('*'))])
当然你可以读一个足够大的文件来溢出内存。
答
有几种方法可以做到这一点。例如只使用+
应该做的伎俩。
“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(只是如果你真的需要的话)从字符串列表中创建一个字符串。
谢谢,数组方法或多或少地整理了我的问题!我可以问一下,因为我想用非常长的文件来处理这些文件,是否有办法解决溢出问题。我的字符串长度将达到几百个字符。 – Spyros 2011-05-16 19:49:38
Python列表不是数组。他们是名单。另外,你不需要方括号。 – pillmuncher 2011-05-16 20:31:20
@Spyros如果您可以将文件读入内存而不会遇到溢出......这些日子的文件大小为千兆字节。 – koblas 2011-05-16 20:47:27