簡體   English   中英

如何使用Python 3.x在不同的文件中搜索不同的字符串

[英]How to search for a different string in a different file using Python 3.x

我正在嘗試搜索一大組文本文件(160K),以查找為每個文件更改的特定字符串。 我有一個文本文件,目錄中的每個文件都包含我想要搜索的字符串值。 基本上我想使用python創建一個新的文本文件,它給出文件名,字符串,如果字符串存在則為1,如果不存在則為0。

到目前為止我使用的方法是從文本文件創建一個字典。 從那里我被卡住了。 這是我在偽代碼中的數字:

**assign dictionary**
d = {}
with open('file.txt') as f:
  d = dict(x.rstrip().split(None, 1) for x in f)

**loop through directory**
for filename in os.listdir(os.getcwd()):

***here is where I get lost***
match file name to dictionary
look for string
write filename, string, 1 if found
write filename, string, 0 if not found

謝謝。 它需要有點高效,因為它需要經過大量的文本。

這就是我最終的結果

d = {}
with open('ibes.txt') as f:
  d = dict(x.rstrip().split(None, 1) for x in f)

import os

for filename in os.listdir(os.getcwd()):
    string = d.get(filename, "!@#$%^&*")
    if string in open(filename, 'r').read():
        with open("ibes_in.txt", 'a') as out:
            out.write("{} {} {}\n".format(filename, string, 1))
    else: 
        with open("ibes_in.txt", 'a') as out:
            out.write("{} {} {}\n".format(filename, string, 0))

據我了解你的問題,字典將文件名與字符串相關聯

d = {
 "file1.txt": "widget",
 "file2.txt": "sprocket", #etc
}

如果每個文件都不是太大,您可以將每個文件讀入內存:

for filename in os.listdir(os.getcwd()):
    string = d[filename]
    if string in open(filename, 'r').read():
        print(filename, string, "1")
    else: 
        print(filename, string, "0")

此示例使用print,但您可以寫入文件。 在循環outfile = open("outfile.txt", 'w')之前打開輸出文件,而不是打印使用

outfile.write("{} {} {}\n".format(filename, string, 1))

另一方面,如果每個文件太大而無法輕松放入內存,則可以使用mmap ,如在txt文件搜索字符串Python中所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM