導航:首頁 > 編程語言 > python判斷對象是否存在

python判斷對象是否存在

發布時間:2022-04-12 18:59:44

python怎麼判斷文件是否存在

正文

通常在讀寫文件之前,需要判斷文件或目錄是否存在,不然某些處理方法可能會使程序出錯。所以最好在做任何操作之前,先判斷文件是否存在。

這里將介紹三種判斷文件或文件夾是否存在的方法,分別使用os模塊、Try語句、pathlib模塊。

回到頂部

1.使用os模塊

os模塊中的os.path.exists()方法用於檢驗文件是否存在。

❷ 怎麼判斷 Python 對象是否包含某個屬性

方法一:通過異常捕捉來實現邏輯

classFooClass:

pass


k=FooClass()

try:

#dosomethingyouneed

printk.att

exceptAttributeErrorase:

#error:hasnotattribute

pass

方法二:調用hasattr方法

hasattr(object, name)
說明:判斷對象object是否包含名為name的特性(hasattr是通過調用getattr(ojbect, name)是否拋出異常來實現的)。
參數object:對象。
參數name:特性名稱。

>>> hasattr(list, 'append')

True

>>> hasattr(list, 'add')

False

方法三:使用dir方法

objlist = dir(k)

if 'att' in objlist:

#do some thing you need

print k.att

else:

#error: has not attribute

pass

❸ 怎樣在python中判斷一個文件是否存在

你可以用os.path.isfile

如果路徑下是現有普通文件返回true。因此islink()和isflie()都可以來判斷相同目錄下是否有文件。

import os.path
os.path.isfile(fname)

在Python3.4之後pathlib模塊提供了一種面向對象的方法用於判斷文件是否存在:

from pathlib import Path

my_file = Path("/path/to/file")
if my_file.is_file():
# file exists

❹ python 怎麼判斷某個對象是否在列表中出現過

通過異常捕捉來實現邏輯
class FooClass:
pass
k = FooClass()
try:
#do some thing you need
print k.att
except AttributeError as e:
#error: has not attribute
pass

❺ Python之運算符匯總

1.算數運算符

假設 a= 10, b = 20

2.比較運算符

相關推薦:《Python視頻教程》

3.賦值運算符

4.邏輯運算符

邏輯運算的順序排列:從左往右開始執行

() > not > and > or

and or 一真一假

都為真: 取後面的 取前面的 取假的

都為假: 取前面的 去後面的 取真的

not True: False

not False: True

5.成員運算符

in -- 存在

not in -- 不存在

❻ python怎麼判斷一個對象的屬性

方法一:通過異常捕捉來實現邏輯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

class FooClass:

pass

k = FooClass()

try:

#do some thing you need

print k.att

except AttributeError as e:

#error: has not attribute

pass

方法二:調用hasattr方法
hasattr(object, name)
說明:判斷對象object是否包含名為name的特性(hasattr是通過調用getattr(ojbect, name)是否拋出異常來實現的)。
參數object:對象。
參數name:特性名稱。
>>> hasattr(list, 'append')
True
>>> hasattr(list, 'add')
False
方法三:使用dir方法
objlist = dir(k)
if 'att' in objlist:
#do some thing you need
print k.att
else:
#error: has not attribute

pass

❼ python threading local 判斷值存不存在

#coding=utf-8
import threading
# 創建全局ThreadLocal對象:
localVal = threading.local()
localVal.val = "Main-Thread"
def process_student():
print '%s (in %s)' % (localVal.val, threading.current_thread().name)
def process_thread(name):
#賦值
localVal.val = name
process_student()
t1 = threading.Thread(target= process_thread, args=('One',), name='Thread-A')
t2 = threading.Thread(target= process_thread, args=('Two',), name='Thread-B')
t1.start()
t2.start()
t1.join()
t2.join()
print localVal.val

列印結果:

One (in Thread-A)
Two (in Thread-B)
Main-Thread

threading.local()這個方法的特點用來保存一個全局變數,但是這個全局變數只有在當前線程才能訪問,

localVal.val = name這條語句可以儲存一個變數到當前線程,如果在另外一個線程裡面再次對localVal.val進行賦值,

那麼會在另外一個線程單獨創建內存空間來存儲,也就是說在不同的線程裡面賦值 不會覆蓋之前的值,因為每個

線程裡面都有一個單獨的空間來保存這個數據,而且這個數據是隔離的,其他線程無法訪問

這個東西可以用在那些地方呢,比如下載,現在都是多線程下載了,就像酷狗那樣,可以同時下載很多首歌曲,那麼

就可以利用這個方法來保存每個下載線程的數據,比如下載進度,下載速度之類的

所以 如果你在開發多線程應用的時候 需要每個線程保存一個單獨的數據供當前線程操作,可以考慮使用這個方法,簡單有效

其實這樣的功能還有很多種方法可以實現,比如我們在主線程實例化一個dict對象,然後用線程的名字作為key,因為線程之間可以共享數據,

所以也可以實現相同功能,並且靈活性更多,不過代碼就沒那麼優雅簡潔了

❽ 用Python寫入文件,若該行數據存在則不寫入;若不存在,則寫入。怎麼才能在寫入之前判斷該數據是否存在

用open,該函數創建一個文件對象,這將用來調用與之關聯的其他支持方式即可:

file object = open(file_name [, access_mode][, buffering])

file_name: file_name參數是一個字元串值,包含要訪問的文件的名稱。

access_mode: access_mode決定了文件必須被打開,即,讀,寫,追加等的可能值是下表中給定的一個完整的列表的模式。這是可選參數,默認文件存取方式為read (r)。

(8)python判斷對象是否存在擴展閱讀:

file命令的函數意義:

file 命令讀取用 File 參數或者 FileList 變數指定的文件,在每個文件上執行一系列測試,然後將它們按照類型分類。然後此命令將文件類型寫入標准輸出。文件可以是常規文件、目錄、FIFO(指定的管道)、塊特殊文件、字元特別文件、符號鏈接或者套接字類型。

1、對於長度為零的常規文件,將識別為空文件。

2、對於符號鏈接文件,預設情況下此鏈接後跟符號鏈接引用的文件。

如果文件是 ASCII 碼的格式,則 file 命令將檢查前 1024 個位元組然後確定文件類型。如果文件不是 ASCII 格式,則 file 命令將嘗試區分二進制數據文件和包含擴展字元的文本文件。

❾ python實現mysql插入數據時,判斷是否存在,不存在就插入,重復跳過

方案一:使用ignore關鍵字
如果是用主鍵primary或者唯一索引unique區分了記錄的唯一性,避免重復插入記錄可以使用:
insert ignore into table_name(email,phone,user_id) values('[email protected]','99999','9999'),這樣當有重復記
錄就會忽略,執行後返回數字0,還有個應用就是復製表,避免重復記錄:
insert ignore into table(name) select name from table2
方案二:使用Replace
replace的語法格式為:
1. replace into table_name(col_name, ...) values(...)
2. replace into table_name(col_name, ...) select ...
3. replace into table_name set col_name=value, ...
演算法說明:
REPLACE的運行與INSERT很相像,但是如果舊記錄與新記錄有相同的值,則在新記錄被插入之前,舊記錄被刪除,即:
1. 嘗試把新行插入到表中
2. 當因為對於主鍵或唯一關鍵字出現重復關鍵字錯誤而造成插入失敗時:
從表中刪除含有重復關鍵字值的沖突行
再次嘗試把新行插入到表中
舊記錄與新記錄有相同的值的判斷標准就是:表有一個PRIMARY KEY或UNIQUE索引,否則,使用一個REPLACE語句沒有意義
。該語句會與INSERT相同,因為沒有索引被用於確定是否新行復制了其它的行。
返回值:
REPLACE語句會返回一個數,來指示受影響的行的數目。該數是被刪除和被插入的行數的和。
受影響的行數可以容易地確定是否REPLACE只添加了一行,或者是否REPLACE也替換了其它行:檢查該數是否為1(添加)或
更大(替換)。
示例:
eg:(phone欄位為唯一索引)
replace into table_name(email,phone,user_id) values('test569','99999','123')
另外:在 SQL Server 中可以這樣處理:
if not exists (select phone from t where phone= '1')
insert into t(phone, update_time) values('1', getdate())
else
update t set update_time = getdate() where phone= '1'
更多信息請看:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#replace
方案三:ON DUPLICATE KEY UPDATE
如‍上所寫,你也可以在INSERT INTO.....後面加上 ON DUPLICATE KEY UPDATE方法來實現。
如果您指定了ON DUPLICATE KEY UPDATE,並且插入行後會導致在一個UNIQUE索引
或PRIMARY KEY中出現重復值,
則執行舊行UPDATE。例如,如果列a被定義為UNIQUE,並且包含值1,則以下兩個語句具有相
同的效果:
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)
->ON DUPLICATE KEY UPDATE c=c+1;
mysql>UPDATE table SET c=c+1 WHERE a=1;
如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。
注釋:如果列b也是唯一列,則INSERT與此UPDATE語句相當:
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
如果a=1 OR b=2與多個行向匹配,則只有一個行被更新。通常,您應該盡量避免對帶有多個唯一關鍵字的表使用ON DUPLICATE KEY子句。
您可以在UPDATE子句中使用VALUES(col_name)函數從INSERT...UPDATE語句的INSERT部分引用列值。
換句話說,如果沒有發生重復關鍵字沖突,則UPDATE子句中的VALUES(col_name)可以引用被插入的
col_name的值。本函數特別適用於多行插入。VALUES()函數只在INSERT...UPDATE語句中有意義,其它時候
會返回NULL。
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
-> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
本語句與以下兩個語句作用相同:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=3;
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6)
-> ON DUPLICATE KEY UPDATE c=9;
當您使用ON DUPLICATE KEY UPDATE時,DELAYED選項被忽略。
示例: 這個例子是我在實際項目中用到的:是將一個表的數據導入到另外一個表中,數據的重復性就得考慮(如下)。
唯一索引為:email
INSERT INTO table_name1(title,first_name,last_name,email,phone,user_id,role_id,status,campaign_id)
SELECT '','','',table_name2.email,table_name2.phone,NULL,NULL,'pending',29
FROM table_name2
WHERE table_name2.status = 1
ON DUPLICATE KEY UPDATE table_name1.status = 'pending'
語句的關鍵地方,都已高亮出來~
再貼一個例子:
insert into class select * from class1
ON DUPLICATE KEY UPDATE class.course = class1.course
其它關鍵:DELAYED 做為快速插入,並不是很關心失效性,提高插入性能。
IGNORE 只關注主鍵對應記錄是不存在,無則添加,有則忽略。
特別說明:在MYSQL中UNIQUE 索引將會對null欄位失效,也就是說(a欄位上建立唯一索引):

insert into test(a) values(null)
insert into test(a) values(null)
是可以重復插入的(聯合唯一索引也一樣)。

閱讀全文

與python判斷對象是否存在相關的資料

熱點內容
程序員看不懂怎麼辦 瀏覽:271
linux操作系統題 瀏覽:765
單片機無符號數加法 瀏覽:227
應用隱藏加密怎麼關閉 瀏覽:269
汽車空調的壓縮機電線有什麼用 瀏覽:429
電腦加密圖片如何取消加密 瀏覽:340
慧凈電子51單片機視頻 瀏覽:343
javamap賦值 瀏覽:165
什麼app可以玩掌機游戲 瀏覽:46
java簡單聊天室 瀏覽:462
通用汽車編程軟體 瀏覽:432
一級抗震框架梁箍筋加密區規定是多少 瀏覽:974
教你如何把安卓手機變成蘋果 瀏覽:11
app編譯分類 瀏覽:323
怎麼用伺服器的資源包 瀏覽:199
oa軟體手機登陸伺服器地址 瀏覽:289
androidrtp打包 瀏覽:723
信息被加密碼了怎麼辦 瀏覽:420
彈出光碟命令 瀏覽:517
kdj公式源碼分享 瀏覽:355