Python 如果文件的下一行包含字符串,请将其附加到当前字符串的末尾
我有一个有1300万行的CSV。数据不是引号封装的,它包含换行符,这导致一行数据有换行符。数据每行没有多个中断,只有一个中断 我如何获取这样的数据Python 如果文件的下一行包含字符串,请将其附加到当前字符串的末尾,python,Python,我有一个有1300万行的CSV。数据不是引号封装的,它包含换行符,这导致一行数据有换行符。数据每行没有多个中断,只有一个中断 我如何获取这样的数据 Line of data Line of data continuation of previous line of data Line of data Line of data continuation of previous line Line of data 把它变成这样: Line of data Line of data contin
Line of data
Line of data
continuation of previous line of data
Line of data
Line of data
continuation of previous line
Line of data
把它变成这样:
Line of data
Line of data continuation of previous line of data
Line of data
Line of data continuation of previous line
Line of data
我将行存储在一个变量中并处理下一行,查找第一个字符不是“L”,然后附加它,以此来测试这一点。我也尝试过使用
f.tell()
和f.seek()
在文件中移动,但我一直无法让它工作。我能够解决一些问题
infile = "test.txt"
def peek_line(f):
pos = f.tell()
line = f.readline()
f.seek(pos)
return line
f = open(infile, 'r')
while True:
line = f.readline()
if not line:
break
peek = peek_line(f)
if not peek.startswith('T'):
line = (line.strip() + f.readline())
print line,
我愿意接受有关此方法的反馈。假设每一行以空格开头时,它都应该与前一行连接起来,这样应该可以:
with open(data) as infile:
previous_line = None
for line in infile:
if previous_line is None:
previous_line = line
if line.startswith(' '):
line = previous_line.strip() + line
previous_line = line
print(line.strip())
这里有一个便宜,合理有效的延续线为您连接
def cont_lines(source):
last_line = ''
for line in source:
if line.startswith(' '):
last_line += line.lstrip() # append a continuation
else:
if last_line:
yield last_line
last_line = line
if last_line: # The one remaining as the source has ended.
yield last_line
这样使用:
with open("tile.csv") as f:
for line in cont_lines(f):
# do something with line
它只使用文件中最长的一组连续行的内存。重新定义:如果下一个字符串以空格开头,则它是一个连续行。顺便说一句,CSV模块还没有处理这个问题吗?我不能使用CSV模块,因为它们没有用引号封装每个列,并且列值有时包含一个或多个逗号。我必须做很多格式化才能正确地分割它。编辑:是的,我已经尝试解决源数据问题。。。对于您的简短示例数据,这是一个徒劳的工作,不确定我们希望如何处理1300万行,虽然这与我的一样,但更好!这很好,但是您可以将读取的行存储在变量中,而不是将其位置存储在文件中并查找它。按顺序做事实际上要简单得多,更优雅(也更高效)。非常感谢。如果您希望将其作为一个函数(而不仅仅是一次性处理文件),您可以修改它以产生行,或者只使用9000的答案(我实际上认为这更优雅)。