簡體   English   中英

Python計算文件中字符的類型

[英]Python Count how many types of characters in a file

python的新手,我正在編寫一個執行大量I / O任務的腳本,一個功能是假設要計算文件中有[OHCN]個字符類型,而不是多少個字符類型。 例如:如果文件中包含“ OOOOOHHHHNNN”,則為3。這就是我所擁有的,是否有一種更好,更有效的方法? 另一個問題是,我正在此腳本中進行大量文件編輯,最初,我有一些功能可以打開需要修改的文件。 處理一個功能中的所有內容(因此,一次打開文件,然后執行我在文件中要做的事情),或者打開每個功能並執行文件操作然后關閉,然后打開另一個功能,會更有效嗎?做那個事情等等。。。再次感謝您的幫助

def ReadFile(xyzfile, inputFile):

     key_atoms = "OHCN"
     s =  open(xyzfile).read()

     atom_count = {ltr: 0 for ltr in key_atoms}

     for char in text:
         if char in key_atoms:
             atom_count[char] += 1
     for key in sorted(atom_count):
        with open(inputFile) as f:
             string1 = "ntyp = 2"
             string2 = "ntyp = ", atom_count[key]
             s = f.read()
             s = s.replace(str(string1), str(string2))

如果您追求每個原子(或字符)的唯一類型,那么我們可以使用一個set並在文件中找到字符與該字符的交集,而無需將整個文件讀入內存就可以訪問該文件(我們使用itertools.chain在這里,而不是一個嵌套循環)。 同樣通過對兩個文件使用with語句,我們將獲得全有或全無的方法(如果我們無法同時打開xyzfile和input_file,則無論如何我們都不要打擾)。 您當前的代碼看起來可以簡化為:

from itertools import chain

with open(xyzfile) as f1, open(input_file) as f2:
    atom_count = len(set('OHCN').intersection(chain.from_iterable(f1)))
    s = f2.read().replace('ntyp = 2', 'nytp = {}'.format(atom_count))

您的替換可能更有效,但未指定s的用途。

counts = {}
with open(infilepath) as infile:
    for line in infile:
        for char in line:
            if char not in counts:
                counts[char] = 0
            counts[char] += 1

print("There are", len(counts), "different characters in the file")
for key in counts:
    print("There are", counts[key], "occurrences of", key, "in the file")

暫無
暫無

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

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