我正在使用一组数据,我已将其转换为字典列表
例如,我列表中的一个项目是
{'reportDate': u'R20070501', 'idnum': u'1078099', 'columnLabel': u'2005',
'actionDate': u'C20070627', 'data': u'76,000', 'rowLabel': u'Sales of Bananas'}
Run Code Online (Sandbox Code Playgroud)
按要求
我列表中的第二项可能是:
{'reportDate': u'R20070501', 'idnum': u'1078099', 'columnLabel': u'2006',
'actionDate': u'C20070627', 'data': u'86,000', 'rowLabel': u'Sales of Bananas'}
Run Code Online (Sandbox Code Playgroud)
第三项可能是:
{'reportDate': u'R20070501', 'idnum': u'1078100', 'columnLabel': u'Full Year 2005',
'actionDate': u'C20070627', 'data': u'116,000', 'rowLabel': u'Sales of Cherries'}
Run Code Online (Sandbox Code Playgroud)
第四项可能是:
{'reportDate': u'R20070501', 'idnum': u'1078100', 'columnLabel': u'Full Year 2006',
'actionDate': u'C20070627', 'data': u'76,000', 'rowLabel': u'Sales of Sales of Cherries'}
Run Code Online (Sandbox Code Playgroud)
我需要腌制这个的原因是因为在合并结果并将它们放入数据库之前,我需要找出列标记的所有方法.第一个和第二个项目将是结果中的一行,第三个和第四个项目将是结果中的下一行(在有人决定统一列标题标签应该是什么之后)
我测试了泡菜,并能够保存和检索我的数据.但是,我需要能够保留输出中的顺序.我有一个想法是添加另一个可以作为计数器的密钥,这样我就可以检索我的数据,然后按计数器排序.有没有更好的办法?
我不想把它放到数据库中,因为它不是永久性的.
我在下面标出了答案.这不是我得到的,所以我需要弄清楚问题是否在我的代码中的其他地方.
我正在编写一个函数,并打算使用字典键及其值作为参数.例如:
testDict={'x':2,'xS':4}
def newFunct(key,testDict['key']):
newvalue=key+str(testDict['key'])
return newValue
for key in testDict:
newValue=newFunct(key,testDict[key])
print newValue
Run Code Online (Sandbox Code Playgroud)
我在输入分号后点击返回按钮时出现SyntaxError:无效语法.我猜这是告诉我,我不能以该形式传递字典值.据推测,我可以定义一个新变量
for key in testDict:
xdixt=testDict[key]
newValue=newFunct(key,xdixt)
Run Code Online (Sandbox Code Playgroud)
并使用xdixt来定义函数
但我希望有一些我不知道的伎俩.我用谷歌搜索并找到了解压缩字典的一些参考,但这似乎不起作用.
这个Python的东西非常酷.我的问题是因为我试图使用存储在字典中的一些值来创建一个新目录.基于我从Stephan的回答中读到的材料,我想知道如何概括我学到的信息.我的目录名称有五个不同的部分,每个部分是处理myDict值的结果.创建目录名称的表达式变得过于复杂,在我看来太复杂,无法轻松阅读.所以我想知道我是否可以使用相同的方法将片段放入列表中,然后在创建目录名称时解压缩它们并且它有效!
def createDirectory(myKey,**myDict):
pathList=[]
pathList.append(myDict['subKey1'])
pathList.append(myDict['subKey2'].lstrip('0'))
pathList.append(myDict['subKey3'])
etc
myPath=os.path.join(*myList)
os.makedirs(myPath)
return(myPath)
Run Code Online (Sandbox Code Playgroud) 今天早些时候,我问了一个问题, 关于传递字典值的函数.虽然我现在明白如何完成我想要完成的事情,但为什么问题(未被问到)从未得到回答.所以我的跟进就是为什么我不能
def myFunction(newDict['bubba']):
some code to process the parameter
Run Code Online (Sandbox Code Playgroud)
是因为解析器规则不允许这样做吗?我用Google搜索+ Python +函数+"允许参数",但没有找到任何有用的信息,所以我会感激任何信息.
我过于简单化了.我有一个结构相似的字典
myDict={outerkey1:(innerkey1:value,innerkey2:value,. . .innerkeyn:value),outerkey2:(innerkey1:value,innerkey2:value,. . .innerkeyn:value),. . .}
Run Code Online (Sandbox Code Playgroud)
正如我所说,我知道如何做我想要的 - 我得到了一个非常有用的答案.但我开始想知道为什么
def myFunction(outerkey,myDict[outerkey]):
Run Code Online (Sandbox Code Playgroud)
给出了一个语法错误,我发现它必须是一个解析问题.
我一直在寻找一个配方/示例来索引元组列表,而不需要修改装饰,排序,不合理的方法.
例如:
l=[(a,b,c),(x,c,b),(z,c,b),(z,c,d),(a,d,d),(x,d,c) . . .]
Run Code Online (Sandbox Code Playgroud)
我一直在使用的方法是使用第二个元素的defaultdict构建一个字典
from collections import defaultdict
tdict=defaultdict(int)
for myTuple in l:
tdict[myTuple[1]]+=1
Run Code Online (Sandbox Code Playgroud)
然后我必须为列表中的每个项目构建一个仅包含元组中第二项的列表.虽然有很多方法可以达到目的,但是一个简单的方法是:
tempList=[myTuple[1] for myTuple in l]
Run Code Online (Sandbox Code Playgroud)
然后生成tdict中每个项目的索引
indexDict=defaultdict(dict)
for key in tdict:
indexDict[key]['index']=tempList.index(key)
Run Code Online (Sandbox Code Playgroud)
显然,这似乎不是Pythonic.我一直试图找到一些例子或见解,认为我应该能够使用神奇的东西直接获得索引.到目前为止没有这样的运气
请注意,我知道我可以更直接地采用我的方法,而不是生成tdict.
输出可以是带索引的字典
indexDict={'b':{'index':0},'c':{'index':1},'d':{'index':4},. . .}
Run Code Online (Sandbox Code Playgroud)
在从Nadia的回答中学到很多东西后,我认为答案是肯定的.
虽然她的反应有效但我觉得它比需要的更复杂.我会简单的
def build_index(someList):
indexDict={}
for item in enumerate(someList):
if item[1][1] not in indexDict:
indexDict[item[1][1]]=item[0]
return indexDict
Run Code Online (Sandbox Code Playgroud) 我从一开始就在Python中使用的一种做法是减少我创建的变量数量,与我在SAS或Fortran中尝试执行相同操作时创建的数量相比
例如,这是我今晚写的一些代码:
def idMissingFilings(dEFilings,indexFilings):
inBoth=set(indexFilings.keys()).intersection(dEFilings.keys())
missingFromDE=[]
for each in inBoth:
if len(dEFilings[each])<len(indexFilings[each]):
dEtemp=[]
for filing in dEFilings[each]:
#dateText=filing.split("\\")[-1].split('-')[0]
#year=dateText[0:5]
#month=dateText[5:7]
#day=dateText[7:]
#dETemp.append(year+"-"+month+"-"+day+"-"+filing[-2:])
dEtemp.append(filing.split('\\')[-1].split('-')[0][1:5]+"-"+filing.split('\\')[-1].split('-')[0][5:7]+"-"+filing.split('\\')[-1].split('-')[0][7:]+"-"+filing[-2:])
indexTemp=[]
for infiling in indexFilings[each]:
indexTemp.append(infiling.split('|')[3]+"-"+infiling[-6:-4])
tempMissing=set(indexTemp).difference(dEtemp)
for infiling in indexFilings[each]:
if infiling.split('|')[3]+"-"+infiling[-6:-4] in tempMissing:
missingFromDE.append(infiling)
return missingFromDE
Run Code Online (Sandbox Code Playgroud)
现在我在dEtemp.append(blah blah blah)行中分割了我正在处理4次的字符串之一
filing.split('\\')
Run Code Online (Sandbox Code Playgroud)
历史上在Fortran或SAS中,如果我尝试相同的话,我会将我的字符串"切片"一次并为我将要在此表达式中使用的字符串的每个部分分配一个变量.
我不断强迫自己使用表达式而不是先解析一个值并使用该值.我这样做的唯一原因是我通过模仿其他人的代码来学习,但我一直想到这个问题 - 在哪里可以找到一个有说服力的讨论为什么一个比另一个更好
代码比较驱动器上的一组文档和这些文档的源列表,并检查源中的所有文档是否都显示在驱动器上
好的,评论部分更容易阅读,我决定如何回应nosklos答案
我有一个包含一些文本的html元素列表.我需要找到包含我要提供的所有单词的元素.我有一些代码完成了我想要的,但我相信有更好的方法来做到这一点
myWords=['some', 'supplied','words']
theTextContents='a string that might or might not have all of some supplied words'
goodElements=[]
count=0
for word in myWords:
if word in TheTextContents:
count+=1
if count==len(myWords):
goodElements.append(theTextContents)
Run Code Online (Sandbox Code Playgroud)
还有更多代码,但这是我们测试的基本方法,以查看MyWords中的所有单词是否都在theTextContent中.在我看来,这太笨重了,不能成为优秀的Python代码
任何见解将不胜感激
我正在尝试处理一些应该是xls文件的文件,但事实证明它们是其他东西(根据我在python-excel板上获得的一些帮助,这些文件是Web存档文件或(单个文件网页(* .mht ,* .mhtml))。我可以使用Excel打开文件,但收到一条消息,然后才能继续前进,该消息是-您要打开filename.xls的文件格式不同于文件扩展名指定的文件。打开文件之前,请验证该文件未更正并且来自受信任的源。是否要打开文件?
如果我单击是,该文件将打开,看起来像是Excel工作簿。某些工作表名称被截断。果然,当我点击“另存为”时,显示的默认格式是单个文件网页。
现在,如果我使用SaveAs并选择excel 97-2003格式,请重命名为我的新名称,然后单击“保存”按钮,然后该文件将使用Excel打开,没有任何后续问题。
我一直在尝试找出如何编写一些代码来打开这些文件并将其另存为真实的xls文件,因此我不必让任何人在海上打开并将其保存。
我已经很接近了,但是最后一个问题卡住了,当我用一种新的文件格式保存它时,我得到一个警告框,警告我将保真度降低一些。我不知道该如何抑制它并接受这种保真度的损失?
这是似乎有用的拼凑而成的作品
import win32com.client
xl=win32com.client.Dispatch('Excel.Application')
xl.visible=0 # I have noticed that if I don't set visible to 0 I can't get any response
srce=xl.Workbooks.Open(r'c:\testdd.xls') # testdd is my file that is evidently really not an excel file
srce.SaveAs(r'c:\newtttxt2.xls',FileFormat=1) # this is when the message box pops up
Run Code Online (Sandbox Code Playgroud)
我找到了对称为CheckCompatibility的属性的引用。它似乎是工作簿对象的属性。我想我不能以形式使用它
srce.CheckCompatibility='False'
Run Code Online (Sandbox Code Playgroud)
是因为我没有保存srce对象,而是保存了某种类型的副本?
回到地雷。
错误希望我尝试srce.CheckCompatibility ='False'时不成功
抱歉造成任何混乱
好吧,现在我比平时更困惑,这种行为很奇怪
srce=xl.Workbooks.Open(r'c:\testdd.xls') # I open the file
srce.CheckCompatibility='False' # I try to assign the attribute to srce
srce.SaveAs(r'c:\newtttxt7865.xls',FileFormat=1) …Run Code Online (Sandbox Code Playgroud) 我一直在努力为对象分配一个属性(或者它是一个实例)
xl=win32com.client.Dispatch('Excel.Application')
xl.Visible=0
srce=xl.Workbooks.Open('myexcelfile')
srce.CheckCompatibility='False'
Run Code Online (Sandbox Code Playgroud)
如果我在srce对象中查询其CheckCompatibility属性,我会收到'False'的响应
>>> srce.CheckCompatibility
False
Run Code Online (Sandbox Code Playgroud)
所以我天真地想,无论如何我都可以保存
srce.SaveAs(R'C:\newtttxt14.xls',的FileFormat = 1)
但是当我这样做时,兼容性检查器对话框出现了.我点击继续,文件保存,然后我再次检查兼容性.
>>> srce.CheckCompatibility
True
So I again try to set it and this time I am successful
srce.CheckCompatibility='False'
Run Code Online (Sandbox Code Playgroud)
我再次查询它:
>>> srce.CheckCompatibility
False
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试保存文件时,不会出现兼容性检查器对话框,文件保存完全是我想要的.
在尝试以另一种格式保存文件之前,我需要确定能否设置srce的属性 - 这可能以其他方式发生吗?
谢谢
我正在帮助某人从网站上提取一堆(数万)pdf文件.我们有文件名的模式,但不是所有文件都存在.我假设要求提供一个不存在的文件是很粗鲁的,特别是在这种规模上.我正在使用python,在我的urllib2测试中,我发现这个片段会在文件存在的情况下获取该文件
s=urllib.urlretrieve('http://website/directory/filename.pdf','c:\\destination.pdf')
Run Code Online (Sandbox Code Playgroud)
如果该文件不存在,那么我将得到一个文件,其中包含我分配的名称,但文件来自404页面.现在我可以在完成后处理这个(读取文件并删除所有404页面),但这对他们的服务器来说似乎不太好,也不是非常pythonic.
我试着看看urllib和urlretrieve中的各种函数,并且没有看到任何告诉我文件是否存在的东西.
我正在尝试扫描一些文档以查找分类问题的日期.在这里和其他一些地方阅读后,我构建了以下正则表达式
months='['+'|'.join(calendar.month_abbr[1:])+'|'+'|'.join(calendar.month_name[1:])+']'
techPart='+\\.*\\s*\\d{1,2}[,]?[\\s*][1|2]\\d{3}'
dateExpr=months+techPart
Run Code Online (Sandbox Code Playgroud)
我在这个字符串上测试它
newString='Mar. 31, 2011 Dec. 31, 2010 bananas Mar. 31, 2011 too much malarky September 1, 1992 redundant Dec. 31, 2010 September 29, 1999 March 12 2004 ddfd March. 13 2019 ddfd Mac. 13 2019 ddfd'
Run Code Online (Sandbox Code Playgroud)
当我这样跑的时候
for date in re.findall(dateExpr,newString):
print date
Run Code Online (Sandbox Code Playgroud)
我明白了
Mar. 31, 2011
Dec. 31, 2010
Mar. 31, 2011
September 1, 1992
Dec. 31, 2010
September 29, 1999
March 12 2004
March. 13 2019
Mac. 13 2019 #here is my problem
Run Code Online (Sandbox Code Playgroud) python ×10
coding-style ×2
dictionary ×2
excel ×2
function ×2
win32com ×2
attributes ×1
comparison ×1
containers ×1
date ×1
fortran ×1
indexing ×1
list ×1
logic ×1
messagebox ×1
parameters ×1
regex ×1
urllib ×1