簡體   English   中英

如何在文件路徑中使用變量

[英]how to use variable in file path

我有此工作代碼,但目前尚無法完成全部工作,目前該代碼創建了30個文件並也將其寫入,但是我無法將那30個文件中的每個文件重命名為readme.ini並將其放在其文件夾中(這是列表中顯示的數據庫編號)

我想做的就是創建這30個文件,並將每個文件放置在名為DB號的文件夾中

例如,帶有信息的文件屬於數據庫編號“ 5030”,應放置在名為“ 5030”的文件夾中,列表文件夾中提到的所有那些數據庫編號已經在我的桌面上的文件夾中創建,該文件夾的路徑為C:\\Users\\Administrator\\Desktop\\readme1\\

import datetime

SchoolDB = [5002, 5006, 5020, 5021, 5022, 5025, 5028, 5030, 5102, 5103, 5104, 5105, 5109, 5117, 5119, 5120, 5121, 5126,
        5130, 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5205, 5211, 5238, 5244]
print (SchoolDB)
todayd = datetime.datetime.now().strftime ("%#d/%#m/%Y")
todayt = datetime.datetime.now().strftime ("%H:%M:%S")
for x in SchoolDB:
    dbs = open("%s.ini" % x, 'w+')
   dbs.write("%s \n%s \n\n%s \n%s \n\n%s \n%s \n" % ('[SCHOOL]',x,'[DATE]',todayd,'[TIME]',todayt))

我希望循環創建readme.ini與列表中的每個DB號特定信息的文件,並將該readme.ini文件中的DB號的文件夾。

您需要import os模塊以創建一個文件夾(具有數據庫編號的名稱),然后在文件夾內部創建readme.ini文件(具有相對路徑),如下所示

import os
...
for x in SchoolDB:
    folder = os.mkdir("%s"%x) ## this will creare a folder with the name of x
    dbs = file.open("%s/readme.ini"%x,"w+") ## relative path to your file
    dbs.write("now write what ever you want")

要使用可變文件名,請使用,

filename = '{} hello'.format(varname)

如果要將多個變量傳遞給字符串,請使用

filename = '{} hello{}'.format(varname1,varname2)

在兩種情況下, {}都將被variable值替換

然后只需打開filename

您正在尋找的是:dbs = open(“ {}。ini” .format(x),'w +')

同樣,您要在輸出的字符串上使用“” .format()。 在這種情況下,我發現它更具可讀性:

dbs.write("""[SCHOOL]\n{}\n\n[DATE]\n{}\n\n[TIME]\n{}\n""".format(x, todayd, todayt)

移至上級目錄

Import os
os.chdir('PARENT_DIRECTORY_PATH')

為數據庫創建新目錄,並將目錄更改為新數據庫

for x in SchoolDB:
    os.mkdir(x)
    os.chdir(x)
    dbs = open("readme.ini" , 'w+')

假設我理解正確,您希望創建一系列目錄,並以SchoolDB中的值作為名稱。 在每一個文件中,您希望有一個名為readme.ini的文件。 鑒於這些假設,以下代碼將完成任務:

import os
import datetime

SchoolDB = [5002, 5006, 5020, 5021, 5022, 5025, 5028, 5030, 5102, 5103, 5104,
5105, 5109, 5117, 5119, 5120, 5121, 5126, 5130, 5131, 5132, 5133, 5134, 5135,
5136, 5137, 5205, 5211, 5238, 5244]

todayd = datetime.datetime.now().strftime ("%#d/%#m/%Y")
todayt = datetime.datetime.now().strftime ("%H:%M:%S")

for number in SchoolDB:
    os.makedirs('{}'.format(str(number)), exist_ok=True)
    with open("{}/readme.ini".format(str(number)), 'w+') as dbs:
        dbs.write("[SCHOOL] \n{} \n\n[DATE] \n{} \n\n'[TIME]' \n{} \n".format(number, todayd, todayt))

注意事項:

number是一個更有用的變量名。 培養可讀性是一個好習慣。

os.makedirs() ,如果您擔心某個目錄已經存在(可能是以前的運行),則可以將exist_ok=False設置為如果該目錄確實存在則失敗。 如果選擇這樣做,則需要處理如何處理代碼中的情況。 就目前而言,如果該目錄已經存在,則其中的任何readme.ini都將被新目錄覆蓋。

現代的format()方法也是一種好習慣,並且常量名不必作為變量。 只需將它們放在要格式化的字符串中,如下所示。

在處理文件時,始終使用with open()上下文管理器的最佳實踐。 就目前而言,您的每個文件都保持打開狀態,直到您退出dbs.close()或代碼退出。 這是不必要的,會導致復雜性,並且會使用比必要數量更多的系統資源。

暫無
暫無

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

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