开发者

Limiting the searching of a large file

So here is my program with some new modifications:

datafile = open('C:\\text2.txt', 'r')
completedataset = open('C:\\bigfile.txt', 'r')
smallerdataset = open('C:\\smallerdataset.txt', 'w')
matchedLines = []
for line in datafile:
    splitline = line.split()
    for item in splitline:
        if not item.endswith("NOVA")开发者_JS百科:
            if item.startswith("JJJ") or item.startswith("KOS"):
                matchedLines.append( item )
counter = 1
for line in completedataset:
    print counter
    counter +=1
    for t in matchedLines:
        if t in line:
            smallerdataset.write(line)
datafile.close()
completedataset.close()
smallerdataset.close()

The problem that I have now is that I want to search through the "bigfile" but at a faster rate. I would like to limit the searching of each line in bigfile to the string that occurs before the first ','

I want to use something like index = aString.find(',') I beleive but I'm not having much luck limiting the search of the big file to the string that occurs before the first comma.


You could change

if t in line:

to

if t in line[:line.find(',')]:

This may make the program faster if line is very very long and the comma appears near the beginning. Or it may make the program slower if , appears near the end of the line.

PS. Is every line guaranteed to have a comma in it? The above code acts a bit funky if there is no comma. For example,

In [21]: line='a line of text'

In [22]: line[:line.find(',')]
Out[22]: 'a line of tex'

If you want to ignore lines without a comma, this might be better:

In [23]: line[:line.find(',')+1]
Out[23]: ''


For your splitting issue you can just limit the number of times it splits the line:

first_item = str.split(",",maxsplit=1)[0]


this may help speed it up...sorry about the lack of tabbing

datafile = open('C:\\text2.txt', 'r')
completedataset = open('C:\\bigfile.txt', 'r')
smallerdataset = open('C:\\smallerdataset.txt', 'w')
matchedLines = []
counter = 1
for line in datafile.readlines():
if line[-4:] == "NOVA":
if (line[:3] == "JJJ") or (line[:3] =="KOS"):
counter += 1
for compline in completedataset:
if line in compline:
smallerdataset.write(line)
datafile.close()
completedataset.close()
smallerdataset.close()

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜