我需要在文件中标识某些标记可能存在的位置.我开始认为我会使用list.index但我很快发现它返回第一个(也是唯一的)项目.所以我决定实施我自己的解决方案
count=0
docIndex=[]
for line in open('myfile.txt','r'):
if 'mystring' in line:
docIndex.append(count)
count+=1
Run Code Online (Sandbox Code Playgroud)
但这是Python的权利.必须有一个更简单的解决方案,因为它是Python.在这个网站和网络上狩猎我想出了一些更好的东西
newDocIndex=[]
for line in fileinput.input('myfile',inplace=1):
if 'mystring' in line:
newDocIndex.append(fileinput.lineno())
Run Code Online (Sandbox Code Playgroud)
我知道这是太多的信息但是因为我昨晚完成了总决赛的评分,我认为这是Python,我们想在今年夏天取得一些进展 - 让我们尝试一下列表理解
所以我这样做了:
[fileinput.lineno() for line in fileinput.input('myfile',inplace=1) if 'mystring' in line]
Run Code Online (Sandbox Code Playgroud)
得到一个空列表.所以我首先猜到问题是for中的项必须是用于构建列表的项.那就是如果我有线而不是fileinput.lineno()我会有一个非空列表,但这不是问题.
上述过程可以简化为列表理解吗?
使用答案,但调整它的可读性
listOfLines=[lineNumb for lineNumb,dataLine in enumerate(open('myfile')) if 'mystring' in dataLine]
Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序,以分发给其他学者.应用程序将采用用户提交的三个参数,并输出与这些事件相关的日期和代码列表.我一直在使用字典构建它,并打算构建应用程序,以便在应用程序调用它时从pickle文件加载字典.用户提供的参数将用于查找所需的输出.
我之所以选择这种结构,是因为我对词典和腌菜文件非常熟悉,而且我认为这是我学习曲线最小的问题.字典中可能有多达两百万个键.我对我的机器上有一个合理的子集的性能感到满意.我已经考虑过如何在将整个事情放在一起时遇到任何性能问题时如何打破字典.由于我们正在使用TB级存储值,因此我并不担心其计算机上的磁盘空间量.
说完所有这些我一直在讨论文档,我想知道我是否需要花一些时间来学习和实现替代数据存储文件.我能想到的唯一原因是,是否存在可以将查找速度提高三到五倍或更多的替代方案.
除了这种方式之外,是否有更多python友好的方式从文件中读取100行:
f=open(varFilename,"r")
count=0
for fileLine in f:
print fileLine
count+=1
if count>100:
break
Run Code Online (Sandbox Code Playgroud)
我只是觉得有一个比计数增量更好的方法,然后尝试在循环内部打破.
我正在努力做一些必须是其中之一的事情'这是显而易见的我是一个白痴'的问题.我有一个csv文件,我想读入并用于创建单独的"表".我有一个变量(RID),标志着一个新的'表'的开始.
当我完成操作每一行时,我无法使我的指标变量(currentRow)前进.你可以看到print语句,currentRow保持等于0.
但是如果我在循环之外使用赋值语句,我可以随意改变currentRow的值.测试任务只是了解我在循环中的位置.
currentRow=0
test=0
theTables=defaultdict(list)
for line in csv.DictReader(open(r'c:\temp\testread.csv')):
newTableKey=line['CIK']+'-'+line['RDATE']+'-'+line['CDATE']+'-'+line['FNAME']+' '+line['TID']
if line['RID']=='1':
test+=1 # I can get here
if currentRow>int(line['RID']):
print 'got here'
theTables[oldTableKey]=theList
test+=1 # I cannot get here
theList=[]
theList.append(line)
currrentRow=int(line['RID'])
print currentRow #this value always prints at 0
print int(line['RID']) #this prints at the correct value
oldTableKey=newTableKey
Run Code Online (Sandbox Code Playgroud)