小编wim*_*wim的帖子

Python中的file_put_contents和iconv等价物?

我想要的是非常简单,可以PHP使用一行代码在语言中完成:

file_put_contents('target.txt', iconv('windows-1252', 'utf-8', file_get_contents('source.txt')));
Run Code Online (Sandbox Code Playgroud)

在Python中,我花了一整天时间试图弄清楚如何实现同样的琐碎事情,但无济于事.当我尝试读取或写入文件时,我经常得到UnicodeDecode errors,str has no method decode以及十几个类似的错误.好像我在SO扫描所有线程,但仍然不知道我该怎么做.

python python-3.x

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

带毫秒或微秒和时区偏移的日期时间

这是日期所需的表示形式:

>>> tz = pytz.timezone('US/Central')
>>> datefmt = '%Y-%m-%d %H:%M:%S.%f%z(%Z)'
>>> datetime.now(tz).strftime(datefmt)
'2017-04-27 15:09:59.606921-0500(CDT)'
Run Code Online (Sandbox Code Playgroud)

这是它的记录方式(Linux 上的 Python 3.6.0):

>>> logrecord_format = '%(asctime)s %(levelname)s %(message)s'
>>> logging.basicConfig(format=logrecord_format, datefmt=datefmt)
>>> logging.error('ruh-roh!')
2017-04-27 15:10:35.%f-0500(CDT) ERROR ruh-roh!
Run Code Online (Sandbox Code Playgroud)

它没有正确填充微秒。我已经尝试将 更改为logrecord_format其他一些东西,但我无法弄清楚 - 如何配置记录器以正确的方式显示微秒和时区以strftime完全匹配输出?


编辑 我可以用偏移量解决毫秒,即2017-04-27 15:09:59,606-0500(CDT)。那可能吗? logging提供%(msecs)03d指令,但我似乎无法让时区偏移出现毫秒之后。

python logging timezone datetime python-3.x

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

解析引用的带有空格的args列表的最有效方法

我需要从类似的东西解析聊天机器人字符串

myproject appliances lasthour
Run Code Online (Sandbox Code Playgroud)

("myproject", "appliances", "lasthour")
Run Code Online (Sandbox Code Playgroud)

或者也

myproject appliances "2017-4-13 10:00" "2017-4-13 12:00"
Run Code Online (Sandbox Code Playgroud)

("myproject", "appliances", "2017-4-13 10:00", "2017-4-13 12:00")
Run Code Online (Sandbox Code Playgroud)

问题是引用字符串中的空格.我可以手工完成它,但它是一个更简单,更易维护的1行解决方案,用引号字符串中的空格解析命令行args?

python python-2.7

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

如何检测无法通过obj.name语法访问的属性名称?

setattr将设置不能与常规属性访问一起使用的名称,即obj.name.

>>> from types import SimpleNamespace
>>> my_instance = SimpleNamespace()
>>> setattr(my_instance, 'from', 0)  # works
>>> getattr(my_instance, 'from')
0
>>> my_instance.from
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

如何检查这些名称,以避免使用它们?

python python-3.x

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

为什么(0> 1 + 0> 9)返回False,但((0> 1)+(0> 9))返回0?

在python中添加布尔表达式时,似乎将它们括在括号中会int在添加它们时将它们强制转换,但不这样做会保留它们的类型:

>>> ((0>1) + (0>9))
0
>>> (0>1 + 0>9)
False
>>> (0>1 + (0>9))
False
Run Code Online (Sandbox Code Playgroud)

为什么是这样?在我看来,括号只应该用于改变操作的顺序(除了你使用括号来定义元组的一些情况),而不是内容的类型,所以我希望:

(<expression>) == <expression>
Run Code Online (Sandbox Code Playgroud)

python python-2.7 python-3.x

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

将模拟树的字典转换为列表

我有这样的字典:

{
1: {
   3: {
      1: {c:32},
      2: {c:12}
      },
   4: {c: 66}
   },
2: {
   3: {c: 1},
   5: {c: 2}
   }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能优雅地展开这棵树来获得:

[
[1, 3, 1, 32],
[1, 3, 2, 12],
[1, 4, 66],
[2, 3, 1],
[2, 5, 2]
]
Run Code Online (Sandbox Code Playgroud)

这种结构可以任意深入.

编辑 - 我不关心输出的顺序.'c'是看到特定整数序列的次数.所以在这种情况下,[1,3,1]被看到32次.

确切的格式并不那么重要,这是我追求的技术.

python tree dictionary list python-2.7

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

来自深层嵌套列表/元组的提取元素的递归函数

我想编写一个从深层嵌套元组和列表中提取元素的函数,比方说我有这样的东西

l = ('THIS', [('THAT', ['a', 'b']), 'c', ('THAT', ['d', 'e', 'f'])])
Run Code Online (Sandbox Code Playgroud)

我想要一个没有'THIS'和'THAT'的平面列表:

list = ['a', 'b', 'c', 'd', 'e', 'f']
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的:

def extract(List):
    global terms
    terms = []
    for i in word:
        if type(i) is not str:
            extract(i)
        else:
            if i is not "THIS" and i is not "THAT":
                terms.append(i)
    return terms
Run Code Online (Sandbox Code Playgroud)

但我一直在接受list = ['d', 'e', 'f'],看起来terms = []循环后再次设置'c'.

python recursion nested python-3.x

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

为什么这是假的?`SomeClass.method是SomeClass.method`

以此代码为例:

class SomeClass():
    def a_method(self):
        pass

print(SomeClass.a_method is SomeClass.a_method)     # Example 1: False
print(SomeClass.a_method == SomeClass.a_method)     # Example 2: True
print(SomeClass().a_method is SomeClass().a_method) # Example 3: False
print(SomeClass().a_method == SomeClass().a_method) # Example 4: False
Run Code Online (Sandbox Code Playgroud)
  • 例1:我猜他们是同一个对象.Python每次引用时都会复制该方法吗?
  • 例2:预期.
  • 示例3:预期,因为它们是不同的对象.
  • 示例4:为什么此输出不匹配示例2?

python python-2.7 python-descriptors

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

将变量指定为列表而不在函数中覆盖它

我创建了一个函数,可以将嵌套列表展平为普通列表。

outputarray = []

def flattenarray(x):
    for elmt in x:
        if isinstance(elmt, float) or isinstance(elmt, int):
            outputarray.append(elmt)
        elif isinstance(elmt, list):
            flattenarray(elmt)
    return outputarray
Run Code Online (Sandbox Code Playgroud)

以上工作完美,但我试图在函数内部使用“outputarray”变量,但是当我这样做时,递归步骤会将 outputarray 列表覆盖回一个空列表。

我怎样才能使这项工作在函数内指定一个列表,同时能够在递归过程中附加到它而不覆盖它?

python recursion list

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

将 bytearray 转换为 array.array('B')

我有一个图像数据,主要如下所示:

array('B', [255,216,255...])
Run Code Online (Sandbox Code Playgroud)

它属于类型array.array('B')

由于该数据要通过通信通道发送,因此有必要将该数据转换为类型:bytearray

我将数据转换为字节数组:

data1 = bytearray(CompressedImage.data)
Run Code Online (Sandbox Code Playgroud)

但是,我现在需要获取array.array('B')数据的原始形式。

到目前为止,我找到了byte()函数decode(),但仍然无法反序列化原始数据形式。

python arrays python-3.x

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