回答
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