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
的示例数据吗?也许puts
在each
循环中的一些...
这就是推文的样子: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 不会随着应用旋转而调整大小