小编Yan*_*nis的帖子

如何在Python中递归提取zip文件

我有一个zip文件,其中包含三个zip文件,如下所示:

zipfile.zip\  
    dirA.zip\
         a  
    dirB.zip\
         b  
    dirC.zip\
         c
Run Code Online (Sandbox Code Playgroud)

我想在具有这些名称(dirA,dirB,dirC)的目录中提取zip文件中的所有内部zip文件.
基本上,我想最终得到以下架构:

output\  
    dirA\
         a  
    dirB\
         b  
    dirC\
         c
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

import os, re
from zipfile import ZipFile

os.makedirs(directory)  # where directory is "\output"
with ZipFile(self.archive_name, "r") as archive:
    for id, files in data.items():
        if files:
            print("Creating", id)
            dirpath = os.path.join(directory, id)

            os.mkdir(dirpath)

            for file in files:
                match = pattern.match(filename)
                new = match.group(2)
                new_filename = os.path.join(dirpath, new)

                content = archive.open(file).read()
            with open(new_filename, "wb") as outfile:
                outfile.write(content)
Run Code Online (Sandbox Code Playgroud)

但它只提取zip文件,我最终得到:

output\  
    dirA\
         dirA.zip 
    dirB\
         dirB.zip 
    dirC\ …
Run Code Online (Sandbox Code Playgroud)

python zip unzip zipfile python-3.x

10
推荐指数
3
解决办法
6775
查看次数

namedtuple中的namedtuple的Python语法

是否有可能namedtuple在另一个内部namedtuple

例如:

from collections import namedtuple

Position = namedtuple('Position', 'x y')
Token = namedtuple('Token', ['key', 'value', Position])
Run Code Online (Sandbox Code Playgroud)

它给出了"ValueError:类型名称和字段名称必须是有效的标识符"

另外,我很好奇是否有更多的Pythonic方法来构建这样的嵌套容器?

python namedtuple python-3.x

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

仅使用扩展名打开文件(Python)

我有一个Python脚本,该脚本打开位于特定目录工作目录)中的特定文本文件并执行一些操作。

(假设目录中有一个文本文件,那么它将永远不超过一个.txt

with open('TextFileName.txt', 'r') as f:
    for line in f:
        # perform some string manipulation and calculations

    # write some results to a different text file
    with open('results.txt', 'a') as r:
        r.write(someResults)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何让脚本在目录中找到文本(.txt)文件并打开它,而无需显式提供其名称(即,不提供'TextFileName.txt')。因此,运行该脚本不需要打开哪个文本文件的参数

有办法在Python中实现吗?

io user-input file input python-3.x

7
推荐指数
2
解决办法
4085
查看次数

过滤Python生成器表达式中的值

我有一个字典dct,我希望它的每个值都可以求和,只要它们在指定的列表中存在相应的键lst.

我到目前为止使用的代码是:

sum(dct[k] for k in lst)
Run Code Online (Sandbox Code Playgroud)

在上面的生成器表达式中,我想处理KeyError以防在列表中找不到列表中的键.我似乎无法找到如何实现(语法明智的)或者是try- except的方式,也不是if- else这个生成器表达式内的方法.

如果在字典中找不到列表中键,则它应该继续获取其他值.总和的最终结果不应受任何缺失键的影响.如果没有密钥存在,那么零应该是和的结果.

python dictionary keyerror

4
推荐指数
2
解决办法
3697
查看次数

减去日期时间对象以获得以毫秒为单位的数值结果(Python)

尝试从两个包含时间戳且格式为 的字符串中查找经过的时间hh:mm:ss.mss。基本上,我想减去两个对象并以毫秒datetime为单位获得数值结果。

这是我的代码:

from datetime import datetime

elapsed_time = 0
s = '13:46:34.550'
e = '13:46:36.750'

# only interested on the time part, not the date
start_time = datetime.strptime(s, '%H:%M:%S.%f')
end_time   = datetime.strptime(e, '%H:%M:%S.%f')

#elapsed_time = end_time - start_time
#elapsed_time = (end_time - start_time).microsecond
Run Code Online (Sandbox Code Playgroud)

对于这两种elapsed_time计算,我都得到一个TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'int'.

它应该打印00:00:02.250或(理想情况下)2200

有什么想法我做错了吗?

python-3.x python-datetime

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

如何使用Python 3中的readlines读取由空格分隔的整数输入文件?

我需要读取一个包含一行整数(13 34 14 53 56 76)的输入文件(input.txt),然后计算每个数字的平方和.

这是我的代码:

# define main program function
def main():
    print("\nThis is the last function: sum_of_squares")
    print("Please include the path if the input file is not in the root directory")
    fname = input("Please enter a filename : ")
    sum_of_squares(fname)

def sum_of_squares(fname):
    infile = open(fname, 'r')
    sum2 = 0
    for items in infile.readlines():
        items = int(items)
        sum2 += items**2
    print("The sum of the squares is:", sum2)
    infile.close()

# execute main program function
main()
Run Code Online (Sandbox Code Playgroud)

如果每个数字都在它自己的行上,它可以正常工作.

但是,当所有数字都在一个由空格分隔的行上时,我无法弄清楚如何做到这一点.在这种情况下,我收到错误: …

python integer readlines python-3.x

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

BigQuery SHA256功能

我需要使用哈希一些字符串SHA256.使用BigQuery这样做会导致我理解为BASE64结果,因为我需要不同的东西.

例如,如果我想散列"def@gmail.com",结果应该是:

c392e50ebeca7bea4405e9c545023451ac56620031f81263f681269bde14218b

但这样做BigQuery:

SELECT SHA256("def@gmail.com") as sha256;
Run Code Online (Sandbox Code Playgroud)

结果是:

w5LlDr7Ke + pEBenFRQI0UaxWYgAx + BJj9oEmm94UIYs =

这是我需要得到的第一个结果,如果可能的话,任何想法BigQuery,我试图避免需要使用javascript它.

hash sha256 google-bigquery

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

Python 中的 Namedtuple 格式化/漂亮打印

打印时遇到问题namedtuple

Info = namedtuple('Info', ['type', 'value', 'x', 'y'])
Run Code Online (Sandbox Code Playgroud)

以便这些值对齐并在它们之间留有空格(填充),例如像这样:

Info( type='AAA',    value=80000,   x=16.4,   y=164.2 )
Info( type='A',      value=78,      x=1.5,    y=11.3  )
Info( type='ABBCD',  value=554,     x=11.7,   y=10.1  )
Info( type='AFFG',   value=1263,    x=121.3,  y=12.8  )
Run Code Online (Sandbox Code Playgroud)

理想情况下,没有逗号。我已经尝试pprint并尝试使用此处的_asdict建议进行打印,但没有成功。与我无法使其与命名元组一起工作的相同。任何想法或示例代码?format

python formatting namedtuple pprint python-3.4

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

读取文件直到python中的特定字符

我当前正在开发一个应用程序,该应用程序需要从文件中读取所有输入,直到遇到某个字符为止。

通过使用代码:

file=open("Questions.txt",'r')
c=file.readlines()
c=[x.strip() for x in c]
Run Code Online (Sandbox Code Playgroud)

每次遇到条带时\n,都会将其从输入中删除并视为list中的字符串c

这意味着每一行都被分成列表的一部分c。但是我想列出一个遇到任何特殊字符的列表

如果输入文件包含以下内容:

1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
Run Code Online (Sandbox Code Playgroud)

然后我想得到一个清单 c=['1.Hai\n2.Bye','3.Hello\n4.OApd']

请帮助我做到这一点。

python python-3.x

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