gpt4 book ai didi

ruby - 获取托管在 S3 上的文件的行数

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:21 25 4
gpt4 key购买 nike

我们允许人们将文件上传到 S3,然后我们显示该文件中有多少行的行数。为此,我们运行一个后台进程 (DelayedJob),该进程从 S3 获取文件,然后计算文档中的换行数。总的来说,这很有效。

下面是完成工作的代码:

  def self.line_count_from_s3(options={})

options = { :key => options } if options.is_a?(String)

line_count = 0

unless options[:key]
raise ArgumentError, 'A valid S3 key is required.'
end

s3 = AWS::S3.new
file = s3.buckets[ENV['S3_BUCKET']].objects[options[:key]]

unless file.exists?
raise IOError, 'Unable to load that import from S3. Key does not exist.'
end

# Stream download chunks of the file instead of loading it all into memory
file.read do |chunk|
# Normalize line endings
chunk.gsub!(/\r\n?/, "\n")
line_count += chunk.scan("\n").count
end
# Don't count the empty newline (assumes there is one)
line_count -= 1 if line_count > 0

line_count
end

出于某种原因,一些文件的行数完全错误。例如,一个有 10,000 行的文件显示为 40,000 行。这是不一致的。大多数文件工作正常。

我想弄清楚这是否可能是由 S3 分块读取器的工作方式引起的,或者是否有其他原因导致了该问题。知道为什么记录计数会出错吗?有没有我不知道的更好的方法?

最佳答案

我不知道你为什么要将 line_count 初始化为 0 并执行 +=。你不需要它。您的计数例程将简化为:

file.read do |chunk|
chunk.gsub!(/\r\n?/, "\n")
line_count = chunk.count("\n")
end

关于ruby - 获取托管在 S3 上的文件的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17887351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com