我有一个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) 是否有可能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脚本,该脚本打开位于特定目录(工作目录)中的特定文本文件并执行一些操作。
(假设目录中有一个文本文件,那么它将永远不超过一个.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中实现吗?
我有一个字典dct,我希望它的每个值都可以求和,只要它们在指定的列表中存在相应的键lst.
我到目前为止使用的代码是:
sum(dct[k] for k in lst)
Run Code Online (Sandbox Code Playgroud)
在上面的生成器表达式中,我想处理KeyError以防在列表中找不到列表中的键.我似乎无法找到如何实现(语法明智的)或者是try- except的方式,也不是if- else这个生成器表达式内的方法.
如果在字典中找不到列表中的键,则它应该继续获取其他值.总和的最终结果不应受任何缺失键的影响.如果没有密钥存在,那么零应该是和的结果.
尝试从两个包含时间戳且格式为 的字符串中查找经过的时间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。
有什么想法我做错了吗?
我需要读取一个包含一行整数(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)
如果每个数字都在它自己的行上,它可以正常工作.
但是,当所有数字都在一个由空格分隔的行上时,我无法弄清楚如何做到这一点.在这种情况下,我收到错误: …
我需要使用哈希一些字符串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它.
打印时遇到问题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
我当前正在开发一个应用程序,该应用程序需要从文件中读取所有输入,直到遇到某个字符为止。
通过使用代码:
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 ×6
python-3.x ×6
namedtuple ×2
dictionary ×1
file ×1
formatting ×1
hash ×1
input ×1
integer ×1
io ×1
keyerror ×1
pprint ×1
python-3.4 ×1
readlines ×1
sha256 ×1
unzip ×1
user-input ×1
zip ×1
zipfile ×1