Code: เปลี่ยนชื่อรูป จำนวนมากๆ

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

เนื่องจาก ที่ทางบริษัท ต้องการ Emoticon หรือ Emotion
เพื่อจะเอาไปใส่ในเวปบอร์ด

ดังนั้นเราก็จึงไปหารูปมา แต่ทว่า รูปที่ได้มานั้น ชื่อไม่เรียงกัน T-T

โหลดมาร้อยกว่ารูป จะมานั่ง rename เองนั้น ก็ทำได้แต่ก็เสียเวลามากๆๆ

และก็ต้องนำชื่อทั้งหมดมาใส่ในไฟล์ JAVA ในรูปแบบ Array และก็ยังต้องใส่ ascii แทนรูปอีก (ลืมบอกไปครับว่าใช้ Jive Forum)

[อย่างเช่น รูปยิ้ม.gif = :-)]

เกือบจะทิ้ง Emotion ไปแล้ว แต่ก็นึกถึง Python ขึ้นมาได้
และแล้วเราก็ลงมือ

import os
i = 0
ascii = []
name = []
for root,dirs,files in os.walk(os.curdir,topdown=False):
    for name in files:
        os.rename(name,"emotion"+str(i)+".gif")
        name.append("emotion"+str(i)+".gif")
        ascii.append("emotion"+str(i))
 
f.open("name.txt","w")
f.write(str(name))
f.close()
f.open("ascii.txt","w")
f.write(str(ascii))
f.close()

แค่นี้ ไฟล์ที่ได้ก็จะมีชื่อที่เรียงกัน แถมยังได้ ไฟล์ชื่อ กับ ascii ไฟล์อีกด้วย
(ไม่แน่ใจน่ะครับว่าจะผิดพลาดตรงไหน ลองดูก็แล้วกันครับ ประมาณว่าทำตอนเช้า มา Post ตอนค่ำ)

พอดีเจอ Error ครับ เลยลองแก้ ๆ ดู ออกมาประมาณนี้ครับ

import os
 
def main():
	i = 0
	f1 = open("name.txt","w")
	f2 = open("ascii.txt","w")
	for root,dirs,files in os.walk(os.getcwd(),topdown=False):
		for name in files:
			if name[-4:] == '.gif' and os.path.isfile(root+'/'+name):
				try :
					os.rename(root+'/'+name,"%s/emotion%d.gif"%(root,i))
					f1.write("emotion%d.gif\n"%i)
					f2.write("emotion%d\n"%i)
					i += 1
				except OSError, e:
					print "Error by : %s/%s (%s)"%(root,name, e)
	f1.close()
	f2.close()
 
if __name__ == '__main__': main()

แต่ผมเข้าใจว่า name.txt กับ ascii.txt ไม่จะเป็นต้องมีก็ได้มั้งครับ เพราะยังไงชื่อก็มี pattern อยู่แล้ว แค่รู้เลขเริ่มต้น กับเลขสุดท้ายก็น่าจะพอ แล้วค่อย generate เอาทีหลัง

ขอบคุณครับ เจอ Error จริงๆด้วย (ลืม i+=1 )
จริงๆแล้วที่ทำ name.txt กับ ascii.txt เป็น List ก็เพราะว่า ลักษณะมันคล้ายๆกับ Array ของ Java ครับ

Array Java = "Data1","Data2"
List Python = 'Data1','Data2'

เมื่อผมได้ name.txt กับ ascii.txt แล้ว ผมก็แก้จาก ' ให้เป็น " ก็จะได้ array java แล้วครับ (ตอนนั้นยังคิดวิธีตามคุณ bow_der_kleine ออก - -a)

The Ubuntu Counter Project - user number # 13421

..

เออ ไม่เกี่ยวกับเขียนโปรแกรมเท่าไรนะครับ คือว่าเห็นว่าอยากจะเปลี่ยนชื่อไฟล์จำนวนมากๆ
ลองโปรแกรม Bulk Rename Utility (http://www.bulkrenameutility.co.uk/Main_Intro.php) ที่ฟรีไหมครับ

แต่ถ้าไม่ต้องการก็ไม่เป็นไรนะครับ พี่น้อง

ไม่เกี่ยวยังไงเหรอครับ มันก็เป็นการเขียนโปรแกรมแก้ปัญหาง่ายๆ อย่างน้อยก็เป็นการฝึกเขียนโปรแกรมเบื้องต้น (ซึ่งเป็นส่ิงที่ดี)
บางทีเขียนเองมันได้รู้อะไรมากกว่าแค่ไปดาวน์โหลดมาใช้นะครับ

คุณ tekkasit คงแค่อยากแนะนำโปรแกรมเฉย ๆ มั้งครับ

ขอเสริมครับ ประโยชน์อีกอย่างที่ผมเห็นจากการเขียนโปรแกรมเอง (หากเขียนง่าย ๆ นะครับ) นอกจากเรื่องการฝึกเขียนโปรแกรมแล้ว คือ การต่อยอดได้ครับ เกิดวันนึง เราต้องการโปรแกรมที่มีความสามารถที่มากขึ้นไปอีก แต่หาโปรแกรมได้ไม่ตรงกับใจ บางครั้งการเขียนโปรแกรมใช้เอง อาจจะเร็วกว่าก็ได้ครับ

ซึ่งงาน admin เล็ก ๆ น้อย ๆ สัพเพเหระ พวกนี้ python ค่อนข้างเก่ง (Ruby นี่ไม่แน่ใจ แต่่คิดว่าคงไม่แพ้กัน) บางครั้งแม้ว่าจะมีโปรแกรมให้ใช้อยู่แล้ว แต่ไม่ตรงใจเสียทีเดียว ผมคิดว่าค่อนข้างคุ้มหากจะเขียนโปรแกรมเอง อย่างโปรแกรมเปลี่ยนชื่อนี่ ขนาด 20 บรรทัด น่าจะใช้เวลาเขียนกันไม่เกินครึ่งชั่วโมง แต่โปรแกรมที่ได้ เราสามารถนำไปใช้ในเรื่องอื่น ๆ ได้อีกมากมาย เช่น เปลี่ยนชื่อเฉพาะบางไฟล์ โดยใช้ regex, ก้อบปี้ไฟล์โดยใช้ regex, ก้อบปี้ไฟล์แบบ incremental, เปลี่ยนชื่อไฟล์ผ่านโปรโตคอลแบบต่าง ๆ, etc.

เห็นด้วยกับคุณ bow_der_kleine เป็นอย่างยิ่งครับ
ป.ล. ใช้ Ruby ในงาน admin ประทับใจมากครับ ส่วนตัวคิดว่าสะดวกกว่า shell script เยอะ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น