我正在逐行读取文件并进行一些文本处理,以便以某种格式输出 我的字符串处理代码如下:
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
基本上,我如何将多个字符串连接成一个大字符串?
如果我从一个包含很长字符串的文件中读取,是否存在因将多条物理线连接成一条逻辑线而导致溢出的风险?
答案 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
。