回答
s = 'a.pdf'
print s.replace('pdf', 'jpg')
那你在找什麼?
這是一個簡單的解決方案,但如果您有一個名爲「CopyOfMyPdf.jpg」的文件將會失敗。也許s.replace('。pdf','。jpg')會更好,但仍不完美 – ZombieSheep 2009-12-18 11:45:14
yup..This看起來像最美麗的:) – Nullpoet 2009-12-18 11:45:38
這是一個非常假設的解決方案。 – 2009-12-18 11:56:29
我不知道,如果它的優雅:
string.replace
:>>> s = "a.pdf" >>> s.replace(".pdf", ".jpg")
'A.JPG'
正則表達式:
>>> import re >>> re.sub("\.pdf$", ".jpg", "a.pdf") 'a.jpg'
os.path
>>> import os.path >>> name, ext = os.path.splitext("a.pdf") >>> "%s.jpg" % (name) 'a.jpg'
字符串索引:
>>> s = "a.pdf" >>> s[-3:] == "pdf" and s[:-3] + "jpg" 'a.jpg'
你的一些解決方案是不完善的。例如,「.pdf $」匹配「xpdf」以及「.pdf」。當然,替換字符串會對各種輸入做錯誤的事情。 – 2009-12-18 12:23:51
「\ .pdf $」與「xpdf」不匹配,因爲正則表達式顯式查找擴展之前的點。 – kiamlaluno 2009-12-18 12:59:31
@kiamlaluno,原來壞了。你正在看編輯版本,所以評論是「陳舊」。 – 2009-12-18 14:42:39
最 「正確」 這樣做的方法是像下面這樣。無論平臺是什麼,無論擴展是什麼,這都可以處理它,而且通常不需要重新發明輪子。
import os.path
root, ext = os.path.splitext('a.pdf')
# Optional error checking, if necessary:
if ext.lower() != '.pdf':
raise ValueError('File lacks proper extension')
filename = "%s.jpg" % (root,)
祝賀你的逆轉徽章,我有最後的失望;) – 2009-12-18 14:46:39
歡迎來到逆轉俱樂部。出來回來,我們會教你祕密的握手。 (這不是真的那個祕密,你只需要轉身,用你的左手背在背後。) – 2009-12-18 15:55:02
很好地完成!並用逆轉啓動 – curtisk 2009-12-18 18:13:34
不是最優雅的也許,但更安全:
root, ext = os.path.splitext(s)
if ext != '.pdf':
# Error handling
else:
s = root + '.jpg'
>>> s = 'a.pdf'
>>> s[-3:]=="pdf" and s[:-3]+"jpg"
'a.jpg'
使用$
從正則表達式,以確保您替換文件擴展名。
>>> import re
>>> s = 'my_pdf_file.pdf'
>>> re.sub('\.pdf$', '.jpg', s)
'my_pdf_file.jpg'
「.pdf $」匹配「xpdf」以及「.pdf」,因此將遠遠超過僅僅用文字替換文字字符串.pdf。 – 2009-12-18 12:25:06
你有一個\。那裏 – 2009-12-18 12:31:38
我看到你在那裏做了什麼。 – PaulMcG 2009-12-18 14:03:29
我的建議1ch1g0的解決方案,但不是s[-3:]=='pdf'
:s.endswith('.pdf')
並沒有「+」字符串是緩慢:
>>> s = 'a.pdf'
>>> s.endswith('.pdf') and ''.join([s[:-3], 'jpg'])
'a.jpg'
當連接多個字符串時''與'join'相比較慢,因爲只有一些'+'要快得多:我的機器中47ns vs 237ns,用'timeit'測量。 – fortran 2009-12-18 12:52:57
字符串是Python中不變的,所以基本上你不能改變它。
如果你想要一個新的字符串,有很多選擇,這取決於你真正想要的。
def silly_thing(s):
return s[:-4]+".jpg" if s[-4:] == ".pdf" else s
+1擊敗我10個月!另外,只要我們過度*文字*(等待它......),就應該說__return「a.jpg」; __(......看到一個雙關語!)。 – user359996 2010-10-10 09:00:22
這其中需要NumPy,但當然,這意味着它will run much faster比選擇:
>>> s = 'a.pdf'
>>> from numpy import array
>>> ''.join([chr(c) for c in (array([ord(c) for c in s]) + [0, 0, -6, 12, 1])])
'a.jpg'
當然,你是否認爲這種「優雅」與否取決於你的定義「優雅」但與所有其他有用的信息一樣,這個問題並沒有包括這個問題......
編輯:是的,這是一個笑話,但試圖說明一點...
你在開玩笑吧? – SilentGhost 2009-12-18 14:19:25
絕對......我認爲這將是顯而易見的。太微妙了? – 2009-12-18 14:41:28
另外,我還要如何獲得Peer Pressure徽章?別人,給我投票! :) – 2009-12-18 14:44:12
從@Peter Hansen的回答中得到了一些啓發,我設法創建了一個完成您需要的功能。雖然他的方法很好,但它有點缺乏,它只能轉換長度恰好爲5個字符的文件名。
我的解決方案解決了:
from numpy import array
def convert_pdf_filename_to_jpg_filename_in_a_really_really_elegant_way(s):
"""
Examples:
>>> convert_pdf_filename_to_jpg_filename_in_a_really_really_elegant_way("a.pdf")
'a.jpg'
>>> convert_pdf_filename_to_jpg_filename_in_a_really_really_elegant_way("myfile.pdf")
'myfile.jpg'
"""
return ''.join([chr(c) for c in (array([ord(c) for c in s]) + list([0] * (len(s) - 3) + [-6, 12, 1]))])
我很滿意這個代碼。我不介意它是否被添加到Python標準庫(可能在really_really_elegant_code
模塊中?)。但除此之外,還需要將numpy添加到標準庫中。有沒有人有想法,如果這可能發生?
- 1. 將csv轉換爲字符串的最佳方法是什麼?
- 2. 在httpclient中,將HttpEntity轉換爲字符串的最優雅/正確的方法是什麼?
- 3. 什麼是將字符串轉換爲&str的慣用方式?
- 4. 在JavaScript中將數字轉換爲字符串的最佳方式是什麼?
- 5. 什麼是最優雅的方式來使這種字符串數組更改?
- 6. C#,將字符串轉換爲double的最佳方式是什麼?
- 7. 在Julia中將Int轉換爲字符串的最佳方式是什麼?
- 8. 將int數組轉換爲字符串的最佳方式是什麼?
- 9. 將地址對象轉換爲字符串的最佳方式是什麼?
- 10. 什麼是轉換爲數組的最佳字符串格式?
- 11. Scala:將字符串轉換爲布爾值的優雅
- 12. 切換在Java 1.6的優雅方式爲字符串
- 13. 將Int32的字節轉換爲字符串的最簡單方法是什麼?
- 14. 將Redis添加到/ etc/services最優雅的方式是什麼?
- 15. 使用lodash轉換對象的鍵和值的最優雅方式是什麼?
- 16. 將NSTimeInterval轉換爲字符串的正確方法是什麼?
- 17. 應該將字符串轉換爲NSDate的格式是什麼?
- 18. 將TBytes(UTF-16)轉換爲字符串的最佳方法是什麼?
- 19. 將枚舉轉換爲字符串的最佳實踐方法是什麼?
- 20. 將字符串轉換爲流的最簡單方法是什麼?
- 21. 將數組轉換爲xml字符串的最簡單方法是什麼?
- 22. 將字符串轉換爲mysql日期的最佳方法是什麼?
- 23. 將此字符串轉換爲分鐘數的最佳方法是什麼?
- 24. 將XMLGregorianCalendar轉換爲MM/dd/yyyy hh:mm字符串的最佳方法是什麼?
- 25. c#將字符串轉換爲日期 - 這是什麼格式?
- 26. 什麼是一個優雅的方式來將Python字典轉換爲逗號分隔的鍵字符串和逗號分隔值字符串?
- 27. JQuery.each將字符串文字轉換爲字符串。爲什麼?
- 28. 檢查查詢字符串參數值的最優雅方式是否爲空?
- 29. 什麼是一個優雅的方式來轉換IDictionary <字符串,對象>爲IDictionary <字符串,字符串>
- 30. Django中將請求的響應轉換爲DRF響應的最優雅方式是什麼?
請張貼您現在想要美化的代碼。 – 2009-12-18 12:03:15
優雅 - 很好。但美麗嗎?我不記得在OO底漆上有>美女<的部分。儘量讓整個程序(嗯,也許不),或者至少它的總體特徵是美麗的。這是我的建議。並不是說它是可以實現的。代碼出生醜陋,死亡醜陋。就是那樣子。 – martinr 2009-12-18 15:27:56
這些孩子什麼時候可以得到它?這是什麼裏面的數...... – curtisk 2009-12-18 18:11:40