Ruby:文件大小不会随着以数字开头的句子而更新

Posted

技术标签:

【中文标题】Ruby:文件大小不会随着以数字开头的句子而更新【英文标题】:Ruby: File size doesn't update with sentence starting with numbers 【发布时间】:2018-02-22 16:11:33 【问题描述】:

所以我正在使用一支足球队的推特 API,我想只将在现场比赛期间发布的推文写入文件,其中推文是比赛中每分钟的事件。例如,“25' This player got a yellow card”是我正在寻找的推文示例。所有直播游戏推文都以分钟开头,因此是整数,我使用以下正则表达式获取此类推文,并将它们写入文本文件

tweets = client.user_timeline('ManUtd', count: 3200)
tweets_file = File.open("tweets_file.txt", 'w')

tweets.each do |tweet| 
    if /[0-9]/.match(tweet.full_text[0])
        tweets_file.write(tweet.full_text + "\n")
    end
end

问题是,我的文本文件看起来与我添加这些推文后的样子完全一样,但是 File.size() 为 0,我也无法对其执行代码块,也就是说,我不能做File.Open(tweets_file).each并评估文件中的每一行或每个单词,因为正如文件大小所表明的那样,其中没有任何内容,但实际文件中写了一堆推文,所以我很漂亮困惑。

谁能解释一下这里发生了什么?

编辑:我忘了提一下,如果我删除正则表达式,只需将时间轴中的所有推文添加到我的文件中,或者如果我用 [A-Z] 替换正则表达式,那么 File.Size 工作正常,我可以使用 File.Open 上的 each 方法,所以它似乎与句首的整数有关

【问题讨论】:

您能添加一些来自tweets 的示例数据吗?也许putseach 循环中的一些... 这就是推文的样子:89' - 皮萨罗为巴内加出场 - 塞维利亚当晚的第二次换人。 #MUFC #UCL 89' - 马库斯拉什福德 30 码外的任意球偏出。 #MUFC #UCL 86' - AnthonyMartial 从左路突破,显示出极好的速度,但没有人能在他的传中结束。 #MUFC #UCL 84' - 桑德罗取代穆里尔,主队发生了变化。 #MUFC #UCL 83' - 卢卡库发现球门整洁,但 9 号球被判定为控球。 #MUFC #UCL 82' - Muriel 以强大的低射门进行测试,但 #MUFC 男子再次与它相等。 你是不是写完文件后关闭再重新打开?还是您在阅读前倒带文件? 是的,我在阅读之前倒带了文件 实际发生的事情“我不能”不是很容易解释File.Open 不是一种方法,甚至File.open(tweets_file).each 只会返回一个枚举器,因为您没有将块传递给each .这与以数字开头的行无关,您已经展示了本质上是“此代码有效,为什么我没有发布的其他代码不起作用?” 【参考方案1】:

很可能您在推文行的开头有一个空格字符或某种前缀字符串。 使用:

tweet.full_text.strip[0]

这将去除空格。否则你应该找到前缀并去掉它。

【讨论】:

所有推文都以“82' - blah blah”之类的开头,并且没有空格,只是以数字开头 你用什么推特客户端? tweets = client.user_timeline('ManUtd', count: 3200) 不,我是说宝石。【参考方案2】:

我建议分离操作类型(我很确定这会解决您的问题),如下所示:

#!/usr/bin/env ruby

tweets = client.user_timeline('ManUtd', count: 3200)

texts = tweets.map(&:full_text)

live_game_texts = texts.select do |text|
  text.start_with?(/\d/)
end

File.write('live_game_tweets.txt', live_game_texts.join("\n"))

使用File.write使用File.open 大大简化了任务,因为您不必担心关闭文件。

【讨论】:

以上是关于Ruby:文件大小不会随着以数字开头的句子而更新的主要内容,如果未能解决你的问题,请参考以下文章

如何连接匹配模式的行?

求一个正则表达式: 以英文字母开头,只能包含英文字母、数字、下划线

在 Phonegap 中,HTML 不会随着应用旋转而调整大小

Ruby命名规范

磁盘上的图像文件大小(KB)随着Java中动态图像大小的调整(减小大小)而增加

文件读取