簡體   English   中英

如果缺少使用 python 的特定列,則刪除 CSV 文件

[英]Delete CSV file if missing specific column using python

目前,我的代碼查看文件夾中的 CSV 文件,並根據文件在數據中是否包含“PROD_NAME”列來替換字符串。 如果它沒有列“PROD_NAME”,我正在嘗試刪除文件夾中的這些文件。 我可以讓我的代碼打印哪些 csv 文件沒有經過一點調試的列,但我不知道如何從它們所在的文件夾中實際刪除或刪除它們。我嘗試了一個調用 os.remove 的 if 語句() 仍然沒有任何反應。 沒有錯誤或任何東西..它只是完成了所有文件仍在文件夾中的腳本。 這是我的代碼。 任何幫助表示贊賞。 謝謝!

def worker():
    filenames = glob.glob(dest_dir + '\\*.csv')
    print("Finding all files with column PROD_NAME")
    time.sleep(3)
    print("Changing names of products in these tables...")
    for filename in filenames:
        
        my_file = Path(os.path.join(dest_dir, filename))
        
        try:
            with open(filename):
            # read data
                df1 = pd.read_csv(filename, skiprows=1, encoding='ISO-8859-1') # read column header only - to get the list of columns
                dtypes = {}
                for col in df1.columns:# make all columns text, to avoid formatting errors
                    dtypes[col] = 'str'
                df1 = pd.read_csv(filename, dtype=dtypes, skiprows=1, encoding='ISO-8859-1')

                if 'PROD_NAME' not in df1.columns:
                os.remove(filename)
                    
                #Replaces text in files
                if 'PROD_NAME' in df1.columns: 
                    df1 = df1.replace("NABVCI", "CLEAR_BV")
                    df1 = df1.replace("NAMVCI", "CLEAR_MV")
                    df1 = df1.replace("NA_NRF", "FA_GUAR")
                    df1 = df1.replace("N_FPFA", "FA_FLEX")
                    df1 = df1.replace("NAMRFT", "FA_SECURE_MVA")
                    df1 = df1.replace("NA_RFT", "FA_SECURE")
                    df1 = df1.replace("NSPFA7", "FA_PREFERRED")
                    df1 = df1.replace("N_ENHA", "FA_ENHANCE")
                    df1 = df1.replace("N_FPRA", "FA_FLEX_RETIRE")
                    df1 = df1.replace("N_SELF", "FA_SELECT")
                    df1 = df1.replace("N_SFAA", "FA_ADVANTAGE")
                    df1 = df1.replace("N_SPD1", "FA_SPD1")
                    df1 = df1.replace("N_SPD2", "FA_SPD2")
                    df1 = df1.replace("N_SPFA", "FA_LIFESTAGES")
                    df1 = df1.replace("N_SPPF", "FA_PLUS")
                    df1 = df1.replace("N__CFA", "FA_CHOICE")
                    df1 = df1.replace("N__OFA", "FA_OPTIMAL")
                    df1 = df1.replace("N_SCNI", "FA_SCNI")
                    df1 = df1.replace("NASCI_", "FA_SCI")
                    df1 = df1.replace("NASSCA", "FA_SSC")
                    df1.to_csv(filename, index=False, quotechar="'")            
                
        except:
            if 'PROD_NAME' in df1.columns:
                print("Could not find string to replace in this file: " + filename)
                    
worker()

下面是一段讀取原始 csv 數據的代碼塊。 它提取第一行數據(包含列名)並查找列名PROD_NAME 如果找到它,它會將found設置為True 否則,它將found設置為False 為了防止在打開時嘗試刪除文件,刪除是在open()之外完成的。


import os

filename = "test.csv"

with open(filename) as f:
    if "PROD_NAME" in f.readlines()[0].split(","):
        print("found")
        found = True
    else:
        print("not found")
        found = False
if not found:
    os.remove(filename)
else:
    pass#Carry out replacements here/load it in pandas

暫無
暫無

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

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