Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python逐块切片数据_Python_Line_Block_Slice - Fatal编程技术网

使用Python逐块切片数据

使用Python逐块切片数据,python,line,block,slice,Python,Line,Block,Slice,各位,我有一个大文件,格式如下。数据采用“块”格式。一个包含三行的“块”:时间T、用户U和内容W。 例如,这是一个块: T 2009-06-11 21:57:23 U tracygazzard W David Letterman is good man 因为我将只使用包含特定关键字的块。我将原始海量数据逐块切片,而不是将整个数据转储到内存中。每次读取一个块,如果该行内容包含“bike”一词,则将该块写入磁盘 您可以使用以下两个块来测试脚本 T 2009-06-11 21:57:

各位,我有一个大文件,格式如下。数据采用“块”格式。一个包含三行的“块”:时间T、用户U和内容W。 例如,这是一个块:

T   2009-06-11 21:57:23
U   tracygazzard
W   David Letterman is good man
因为我将只使用包含特定关键字的块。我将原始海量数据逐块切片,而不是将整个数据转储到内存中。每次读取一个块,如果该行内容包含“bike”一词,则将该块写入磁盘

您可以使用以下两个块来测试脚本

T   2009-06-11 21:57:23
U   tracygazzard
W   David Letterman is good man

T   2009-06-11 21:57:23
U   charilie
W   i want a bike
我试着一行一行地做这项工作:

data = open("OWS.txt", 'r')
output = open("result.txt", 'w')

for line in data:
    if line.find("bike")!= -1:
    output.write(line)

您可以使用正则表达式:

import re
data = open("OWS.txt", 'r').read()   # Read the entire file into a string
output = open("result.txt", 'w')

for match in re.finditer(
    r"""(?mx)          # Verbose regex, ^ matches start of line
    ^T\s+(?P<T>.*)\s*  # Match first line
    ^U\s+(?P<U>.*)\s*  # Match second line
    ^W\s+(?P<W>.*)\s*  # Match third line""", 
    data):
        if "bike" in match.group("W"):
            output.write(match.group())  # outputs entire match
重新导入
data=open(“OWS.txt”,“r”).read()#将整个文件读入字符串
输出=打开(“result.txt”,“w”)
对于re.finditer中的匹配(
r“”(?mx)#详细正则表达式,^匹配行的开头
^T\s+(?P.*)\s*#匹配第一行
^U\s+(?P.*)s*#匹配第二行
^W\s+(?P.*)s*#匹配第三行“”,
数据):
如果匹配组(“W”)中的“自行车”:
output.write(match.group())#输出整个匹配

由于块的格式是恒定的,您可以使用列表来保存块,然后查看
bike
是否在该块中:

data = open("OWS.txt", 'r')
output = open("result.txt", 'w')

chunk = []
for line in data:
    chunk.append(line)
    if line[0] == 'W':
        if 'bike' in str(chunk):
            for line in chunk:
                output.write(line)
        chunk = []

谢谢,我已经尝试使用for line in data:if line.find(“bike”)!=-1:输出。写(行),这样我可以逐行解决问题,但我不知道如何逐块解决。你不需要给出所有的代码。只是关键部分。每个块中的行是否真正以
T
U
W
开头?是的。对于此特定数据。它的格式是这样的。我以前在超链接中尝试过这个脚本,但是它并不简洁。但你也可以参考一下你有没有考虑过记忆的问题将整个文件读入string@FrankWANG:嗯,你的文件有多大?它是26克,不过我可以把它分成更小的。