0

我正在构建一个包含大约 30,000 个文本文件的数据集,用于构建内容分析数据集。我正在尝试使用正则表达式循环批量文件,以提取并删除我需要的数据。

问题:第一个文件看起来不错,但是当我尝试覆盖文件时,每个后续文件都会打印每个前一个文件的字符串。如:

文件 1:文件 1 中的文本 文件 2:文件 2 中的文本 + 文件 1 中的文本 文件 n:文件 n 中的文本 + 文件 1-(n-1) 中的文本 代码如下所示:

import sys
import re
import glob

string = ''

for n in glob.glob("*.txt"):
    input = open(n, "r")
    s = input.read()
    for line in s:
        string += line.replace("\n"," ")
    input.close()

    for n in glob.glob("*.txt"):
        input2 = open(n, "w")
        input2.write(string)
        input2.close
4

3 回答 3

1

问题在于您对变量的初始化string

由于它在 for 循环之外,它会附加上一个文件的内容

每次处理新文件时都需要初始化这个变量的内容

所以只需将初始化移动到循环内

于 2013-01-10T16:29:52.510 回答
0

input是一个关键字,将其更改为 input1 并删除第二个内部循环。每次在循环开始时也重置字符串。

import sys
import re
import glob

for n in glob.glob("*.txt"):
    string = ''
    input1 = open(n, "r")
    s = input1.read()
    for line in s:
        string += line.replace("\n"," ")        
    input1.close()

    input2 = open(n, "w")
    input2.write(string)
    input2.close()
于 2013-01-10T16:48:11.230 回答
0

您的string变量未设置回string=''. 所以当你做你的时候,string += ....你是在附加内容,因此有你的问题。

在你的 for 循环末尾追加: string = ''

input2.close()需要有括号来执行此功能以关闭文档。

于 2013-01-10T16:34:16.383 回答