使用 Julia 和 Regex 从文件中收集字符串并写入输出文件
Collecting strings from files and writing to an output file using Julia and Regex
(Julia 和通用编程新手)
我正在尝试读取一个充满 JSON 个文件的目录,其中包含大量 HTML 页(大约 30 页)、正则表达式匹配短字符串(每个文件很多,总共多达 60k)和将这些输出到一个大文件 - 我稍后会尝试解析它,以便我可以添加到 MySQL 数据库。
这是我的代码:
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
没有抛出任何错误,但只有少数字符串被写入文件。所以我假设在尝试收集所有字符串时出现问题。
我想我可以试试 但这没有用 - 虽然这可能是因为我完全没有经验!
请问大家有什么想法吗?
如果没有最小的、可重现的例子,很难说。但我的猜测是,由于每个文件调用 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
(Julia 和通用编程新手)
我正在尝试读取一个充满 JSON 个文件的目录,其中包含大量 HTML 页(大约 30 页)、正则表达式匹配短字符串(每个文件很多,总共多达 60k)和将这些输出到一个大文件 - 我稍后会尝试解析它,以便我可以添加到 MySQL 数据库。
这是我的代码:
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
没有抛出任何错误,但只有少数字符串被写入文件。所以我假设在尝试收集所有字符串时出现问题。
我想我可以试试
请问大家有什么想法吗?
如果没有最小的、可重现的例子,很难说。但我的猜测是,由于每个文件调用 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