小编Sco*_*ott的帖子

在Ruby中读取套接字时了解IO.select

我有一些代码,我用来从网络套接字获取数据.它工作正常,但我试图通过反复试验进入它.我谦卑地承认我不完全理解它是如何工作的,但我真的很想.(这是我发现的货物形式的工作代码)

我不明白的部分以"ready = IO.select ..."开头.我不清楚:

  1. IO.select正在做什么(我尝试查找它,但更加困惑的是内核和什么不是)
  2. IO.select的数组参数是什么
  3. 准备好了[0]做了什么
  4. 读取1024字节的一般想法?一次

这是代码:

@mysocket = TCPSocket.new('192.168.1.1', 9761)

th = Thread.new do
    while true
        ready = IO.select([@mysocket])
        readable = ready[0]

        readable.each do |socket|
            if socket == @mysocket
                buf = @mysocket.recv_nonblock(1024)
                if buf.length == 0
                    puts "The server connection is dead. Exiting."
                    exit
                else
                    puts "Received a message"
                end
            end
        end

    end
end
Run Code Online (Sandbox Code Playgroud)

在此先感谢帮助我"学会钓鱼".我讨厌拥有一些我不完全理解的代码 - 这只是巧合.

ruby sockets

18
推荐指数
1
解决办法
9652
查看次数

将时区感知日期字符串转换为UTC并返回Python

我正在将国家气象服务警报提要解析为Web应用程序.我想在达到到期时清除警报.我还想以他们所属的地理区域的本地时间格式显示到期时间.

警报覆盖整个美国,所以我认为最好的方法是存储和比较UTC时间戳的时间.到期时间作为字符串到达​​Feed中,如下所示:2011-09-09T22:12:00-04:00.

我正在使用Labix dateutils包以时区感知的方式解析字符串:

>>> from dateutil.parser import parse
>>> d = parse("2011-09-18T15:52:00-04:00")
>>> d
datetime.datetime(2011, 9, 18, 15, 52, tzinfo=tzoffset(None, -14400))
Run Code Online (Sandbox Code Playgroud)

我还能够在几小时内捕获UTC偏移量:

>>> offset_hours = (d.utcoffset().days * 86400 + d.utcoffset().seconds) / 3600
>>> offset_hours
-4
Run Code Online (Sandbox Code Playgroud)

使用datetime.utctimetuple()time.mktime()方法,我能够将解析的日期转换为UTC时间戳:

>>> import time
>>> expiration_utc_ts = time.mktime(d.utctimetuple())
>>> expiration_utc_ts
1316393520.0
Run Code Online (Sandbox Code Playgroud)

在这一点上,我感觉非常好,我能够将原始字符串转换为表示UTC中的到期时间的时间戳.我能够将当前时间作为UTC时间戳与到期时间进行比较,并确定是否需要清除它:

>>> now_utc_ts = time.mktime(time.gmtime())
>>> now_utc_ts
1316398744.0
>>> now_utc_ts >= expiration_tc_ts
True
Run Code Online (Sandbox Code Playgroud)

我遇到的困难是尝试将存储的UTC时间戳转换回原始的本地化格式.我有从原始转换存储的偏移小时数和我解析的字符串来存储时区标签:

>>> print offset_hours
-4
>>> print timezone
EDT
Run Code Online (Sandbox Code Playgroud)

我想将UTC时间戳转换回本地格式化的时间,但将其转换回a时datetime似乎不起作用: …

python timezone datetime

9
推荐指数
1
解决办法
8096
查看次数

使用Python 2.x unicodecsv时的UnicodeDecodeError

我正在尝试用Unicode字符写出一个csv文件,所以我使用的是unicodecsv包.不幸的是,我仍然得到UnicodeDecodeErrors:

# -*- coding: utf-8 -*-

import codecs
import unicodecsv

raw_contents = 'He observes an “Oversized Gorilla” near Ashford'
encoded_contents = unicode(raw_contents, errors='replace')

with codecs.open('test.csv', 'w', 'UTF-8') as f:
    w = unicodecsv.writer(f, encoding='UTF-8')
    w.writerow(["1", encoded_contents])
Run Code Online (Sandbox Code Playgroud)

这是追溯:

Traceback (most recent call last):
  File "unicode_test.py", line 11, in <module>
    w.writerow(["1", encoded_contents])
  File "/Library/Python/2.7/site-packages/unicodecsv/__init__.py", line 83, in writerow
    self.writer.writerow(_stringify_list(row, self.encoding, self.encoding_errors))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py", line 691, in write
    return self.writer.write(data)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec …
Run Code Online (Sandbox Code Playgroud)

python unicode python-unicode

8
推荐指数
1
解决办法
1575
查看次数

在Tornado中创建处理队列

我正在使用Tornado Web服务器来排队需要在请求/响应周期之外处理的项目.

在下面的简化示例中,每次请求进入时,我都会在名为的列表中添加一个新字符串queued_items.我想创建一些能够观察该列表并处理其中显示的项目的内容.

(在我的实际代码中,项目通过TCP套接字进行处理和发送,当Web请求到达时,可能会或可能不会连接.我希望Web服务器不管套接字连接如何都会保持排队项目

我试图保持这个代码简单,不使用像Redis或Beanstalk这样的外部队列/程序.它不会有很高的音量.

使用Tornado成语来查看client.queued_items新项目列表并在它们到达时处理它们的好方法是什么?

import time

import tornado.ioloop
import tornado.gen
import tornado.web

class Client():

    def __init__(self):
        self.queued_items = []

    @tornado.gen.coroutine
    def watch_queue(self):
        # I have no idea what I'm doing
        items = yield client.queued_items
        # go_do_some_thing_with_items(items)

class IndexHandler(tornado.web.RequestHandler):

    def get(self):
        client.queued_items.append("%f" % time.time())
        self.write("Queued a new item")

if __name__ == "__main__":

    client = Client()

    # Watch the queue for when new items show up
    client.watch_queue()

    # Create the web server 
    application = tornado.web.Application([
        (r'/', …
Run Code Online (Sandbox Code Playgroud)

python tornado

7
推荐指数
1
解决办法
2592
查看次数

Python正则表达式替换文本中未编码的&符号

我正在使用上游系统,有时会向我发送用于HTML/XML输出的文本,其中包含未编码的&符号:

str1 = "Stay at this B&B"
str2 = "He&#8217;s going to Texas A&M"
str3 = "He&#8217;s going to a B&amp;B and then Texas A&M"
Run Code Online (Sandbox Code Playgroud)

我需要替换未编码的&符号,&amp;同时保留作为字符引用一部分或已编码的符号.

(修复上游系统不是一个选项,因为文本有时会到达部分编码,重新编码整个字符串也不是我能做的事情.我真的只想解决这个唠叨的问题并继续与我的生活)

这个正则表达式很好用,但我无法搞清楚语法re.sub:

re.findall("&[^#|amp]", str3)
Run Code Online (Sandbox Code Playgroud)

我不确定如何正确替换文字; 我有一种感觉它会涉及re.group但这是我的正则表达式foo中的一个弱点.

任何帮助表示赞赏.

python regex

5
推荐指数
2
解决办法
3744
查看次数

Python正则表达式捕获以逗号分隔的项列表

我有一个天气预报列表,以我想删除的类似前缀开头.我还想拍摄城市名称:

一些例子:

如果您在凤凰城,图森,弗拉格斯塔夫,盐湖城,帕克城,丹佛,埃斯蒂斯公园,科罗拉多斯普林斯,普韦布洛或阿尔伯克基度假或婚礼计划,本周将......

如果您有迈阿密,杰克逊维尔,梅肯,夏洛特或查尔斯顿的度假或婚礼计划,那么期待一些系统......

如果您在匹兹堡,费城,大西洋城,纽瓦克,巴尔的摩,哥伦比亚特区,里士满,查尔斯顿或多佛都有度假或婚礼计划,那么本周...

字符串以一个共同的前缀"如果您有假期或婚礼计划"开头,并且最后一个城市在它之前有"或".城市列表的长度可变.

我试过这个:

>>> text = 'If you have vacation or wedding plans in NYC, Boston, Manchester, Concord, Providence, or Portland'
>>> re.search(r'^If you have vacation or wedding plans in ((\b\w+\b), ?)+ or (\w+)', text).groups()
('Providence,', 'Providence', 'Portland')
>>>
Run Code Online (Sandbox Code Playgroud)

我觉得我非常接近,但显然它不起作用.我从来没有尝试用可变数量的捕获物品做某事; 任何指导将不胜感激.

python regex

5
推荐指数
1
解决办法
424
查看次数

使用jq将两个数组合并为一个对象

我正在尝试使用jq将NOAA数据源解析为我需要的值:

http://forecast.weather.gov/MapClick.php?FcstType=json&lat=39.56&lon=-104.85

我能够(单独)提取我想要组合的两个数组:

$ cat noaa.json | jq .time.startPeriodName
[
  "Today",
  "Tonight",
  "Friday",
  "Friday Night",
  "Saturday",
  "Saturday Night",
  "Sunday",
  "Sunday Night",
  "Monday",
  "Monday Night",
  "Tuesday",
  "Tuesday Night",
  "Wednesday"
]

$ cat noaa.json | jq .data.weather
[
  "Mostly Sunny",
  "Mostly Cloudy",
  "Mostly Sunny",
  "Partly Cloudy",
  "Slight Chance Showers",
  "Slight Chance Snow Showers",
  "Slight Chance Snow Showers then Mostly Sunny",
  "Mostly Clear",
  "Mostly Sunny",
  "Partly Cloudy",
  "Mostly Sunny",
  "Partly Cloudy",
  "Mostly Sunny"
]
Run Code Online (Sandbox Code Playgroud)

我想将两个数组组合成一个像这样的对象:

{ 
   "Today": "Mostly Sunny",
   "Tonight": "Mostly Cloudy",
   ... …
Run Code Online (Sandbox Code Playgroud)

merge json key jq

2
推荐指数
1
解决办法
2869
查看次数

将Hex Chars转换为比特串(Python或Ruby)

我有一个微控制器从HTTP API返回这样的状态响应:

<response><BS>026219AAF80F440206025019AAF816A944274480</BS></response>
Run Code Online (Sandbox Code Playgroud)

在这种情况下80,最后两个字符表示我需要转换为其二进制位的十六进制值10000000.每个位都是一个标志,对应于该硬件上的状态.

为了让我检查每一个8位,我需要取字符串80(整个响应是一个字符串,我只是抓住最后2个字符)并将其转换为二进制的字符串表示,10000000以便我可以检查每个8单独的字符.

最好的方法是什么?我想用Python或Ruby来做,但我很高兴学习我想要做的一般技术,然后弄明白.

注意:我(显然)没有CS背景,所以这对我来说很陌生.我可能会使用错误的命名法.请随意纠正我; 我希望我得到了我正在寻找的要点.

ruby python hex

1
推荐指数
1
解决办法
1545
查看次数

如何在Matplotlib中创建“点状图”?(不是散点图)

我想创建我的统计书所称的“点状图”,其中图中的点数等于观测值的数目。这是mathisfun.com的示例:

点图示例

在示例中,0在X轴上的值上方有六个点,表示六个观测值零。

似乎“点状图”可以有几种变化。在查找如何使用Matplotlib进行创建时,我只遇到了一个散点图,即一个数据点,该数据点表示X和Y值之间的关系。

Matplotlib是否可以创建我要创建的绘图类型?

python plot matplotlib

0
推荐指数
2
解决办法
6648
查看次数

标签 统计

python ×7

regex ×2

ruby ×2

datetime ×1

hex ×1

jq ×1

json ×1

key ×1

matplotlib ×1

merge ×1

plot ×1

python-unicode ×1

sockets ×1

timezone ×1

tornado ×1

unicode ×1