首页 > 解决方案 > 使用 Julia 和 Regex 从文件中收集字符串并写入输出文件

问题描述

(Julia 和通用编程新手)

我正在尝试读取一个包含大量 HTML 页面(大约 30 个)的 JSON 文件的目录,正则表达式匹配短字符串(每个文件很多,总共最多 60k)并将这些输出到一个大文件 - 我会尝试稍后解析,以便我可以添加到 MySQL DB。

这是我的代码:

patFilename = r"[0-9]+_[0-9]+.json"
patID = r"\/entry\/[0-9]+\/go"

filenames = readdir("C:/getentries/data/")

caseIDs = []

for filename in filenames
    if match(patFilename, filename) === nothing
        continue
    end

    file = open("C:/getentries/data/" * filename)
    case = read(file, String)

    push!(caseIDs, match(patID, case))

end

println(caseIDs)

touch("C:/getentries/data/caseIDs.txt")
open("C:/getentries/data/caseIDs.txt", "w") do caseID
    println(caseID, caseIDs)
end

不会引发任何错误,但只会将几个字符串写入文件。因此,当我尝试收集所有字符串时,我假设出了点问题。

我以为我可以尝试上一个问题中建议的方法,但这并没有帮助-尽管这可能是由于我完全没有经验!

请问有人有什么想法吗?

标签: regexiojulia

解决方案


如果没有一个最小的、可重复的例子,很难说。但我的猜测是,由于您对match每个文件调用一次,因此您只会获得每个文件中的第一个匹配项。相反,您可以调用eachmatch以获取文件内容中所有匹配项的迭代器。

这将类似于以下内容:

for filename in filenames
    # Note that you forgot to close the file in your original example
    # Using higher-level functions such as this method of `read` may be safer
    str = read(filename, String)
   
    # Loop over all matches of the regexp found in the string
    for m in eachmatch(pattern, str)
        push!(matches, m)
    end
end

推荐阅读