விக்கிமூலம்:பைத்தான்3நிரல்கள்/நூற்த்துணைப்பக்க உருவாக்கல்

import csv, os, sys, shutil, pathlib, subprocess, re, time, pywikibot

##இந்நிரலானது மெய்ப்புக்கண்ட பொருளடக்கப் பக்கத்திலுள்ள  ஒவ்வொரு பக்கத்திற்கும், நூற்துணைப்பக்கங்களை, விக்கிமூலத்தில் உருவாக்கும்.

விளைவிடு = print

அந்நூலாசிரியர் = 'இராபர்ட்டு கால்டுவெல்'.strip()
விளைவிடு('தேவை-1:   இந்நூலாசிரியர் →→→→ ' + அந்நூலாசிரியர் + '\n') 
மொழிபெயர்ப்பாளர்1 = 'உள்ளீட்டு நூற்த்தொகுப்பு வார்ப்புருவில் எழுதியுள்ளேன்.'
விளைவிடு('தேவை-2: மொழிபெயர்ப்பாளர் →→→→ ' + மொழிபெயர்ப்பாளர்1 + '\n') 
# இதனை அட்டவணை கொண்டு உருவாக்க வேண்டும். அதன் ஒரு பக்கத்தினை எடுத்துக் கொண்டு, உரலியில் மின்னூலின் பக்கம் என்ன என்பதைப் பாருங்கள்.
# பிறகு அப்பக்கத்தில் அச்சாகியுள்ள நூலின் எண்ணைப் பாருங்கள். இரண்டுக்கும் உள்ள வேறுபாடு கீழுள்ள எண் ஆகும். 
பக்கயெண்வேறுபாடு = 19
விளைவிடு('தேவை-3 : பக்கயெண்வேறுபாடு →→→→ ' + str(பக்கயெண்வேறுபாடு) + '\n')
# மூலக்கோப்பு : விரிதாளின் ஐந்து columns உள்ளன. விவரம் :  
# நமக்கு அளிக்கப்பட்ட விரிதாள் கோப்பினை,  அணித்தரவுக்கோப்பாக மாற்றிக் கொண்டேன். காண்க: https://commons.wikimedia.org/w/index.php?title=File%3ATutorial-tamil-creation-csv-.webm
உள்ளீட்டுக்கோப்பு  = 'அணித்தரவுக்கோப்புத்தரவுகள்.csv'#  மறவாமல், இக்கோப்பின்முதல்வரியைத் தேவையில்லையெனில்  நீக்கிவிடவும்.
விளைவிடு('நிரலால் மாற்றமாகவுள்ள, விக்கி மூலக்கோப்பு = ' + உள்ளீட்டுக்கோப்பு + '\n')

#இதன் கீழுள்ள வரிகள், மூலக்கோப்பில் வெற்றுவரிகளைக் கண்டறிகிறது. பிறகு, மொத்த வரியெண்ணிக்கையைத்தரும்.	
with open(உள்ளீட்டுக்கோப்பு) as உள்ளீட்டுக்கோப்பு:
	படித்தல் = csv.reader(உள்ளீட்டுக்கோப்பு, delimiter='~',)
	உள்ளீட்டுக்கோப்புப்பட்டி = list(படித்தல்)
	def பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி):
		return sum(type(el)== type([]) for el in உள்ளீட்டுக்கோப்புப்பட்டி)
	உள்ளீட்டுக்கோப்புப்பட்டி2 = filter(None, உள்ளீட்டுக்கோப்புப்பட்டி)
	உள்ளீட்டுக்கோப்புப்பட்டி3 = list(உள்ளீட்டுக்கோப்புப்பட்டி2)
	def பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி3):
		return sum(type(el)== type([]) for el in உள்ளீட்டுக்கோப்புப்பட்டி3)
		
#வெற்றுவரிகள் நீக்கியத் தரவினைப்படிகிறேன்.
விளைவிடு(' இக்கோப்பிலுள்ள வெற்று வரிகளை நீக்கியபின், தரவுகளை மாற்றங்களுக்கு எடுக்கிறேன் ...\n')
விளைவிடு('   விரிதாளின் columnA, B, C, D, E, F என்பவை எடுத்துக்கொள்ளப்படுகின்றன ...\n')
# முனையத்தில் இறுதியாக தெரிவதற்காக , கீழுள்ள வரியெண்ணிக்கைகளைத் தருகிறேன்.			
emptyNum = பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி)-பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி3)
விளைவிடு('\n   இக்கோப்பிலுள்ள வெற்று வரிகளின் எண்ணிக்கை  =  ' + str(emptyNum))
விளைவிடு('   இக்கோப்பிலுள்ள தரவுள்ள வரிகளின் எண்ணிக்கை = ' + str(பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி3)))
விளைவிடு('   இக்கோப்பிலுள்ள மொத்த சொல்வரியெண்ணிக்கை = ' + str(பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி)) + '\n')
for வரிசையெண், வரித்தரவு in enumerate(உள்ளீட்டுக்கோப்புப்பட்டி3):	
	subprocess.call("sed -i `` 1d அணித்தரவுக்கோப்புத்தரவுகள்.csv",shell=True)
	#வரித்தரவு2= வரித்தரவு[1:]	# தரவிலுள்ள, cloumnA என்ற வரிசையெண்ணை நீக்குகிறேன்.
	உள்ளீட்டுக்கோப்புப்பட்டி3_strip = [item.strip() for item in வரித்தரவு] # ஒவ்வொரு வரியின் columnB,C,D ஆகியவற்றை strip செய்கிறேன்.
	உள்ளீட்டுக்கோப்புப்பட்டி3_strip_join = str(வரிசையெண்+1) + '. ' + str(உள்ளீட்டுக்கோப்புப்பட்டி3_strip) 
	உள்ளீட்டுக்கோப்புப்பட்டி3_strip_len = len(உள்ளீட்டுக்கோப்புப்பட்டி3_strip)

	if உள்ளீட்டுக்கோப்புப்பட்டி3_strip_len != 6 :
		விளைவிடு('   ஏதே ஒரு column இல்லை.' + உள்ளீட்டுக்கோப்புப்பட்டி3_strip_join) 
		time.sleep(3)
		
	elif உள்ளீட்டுக்கோப்புப்பட்டி3_strip_len == 6 :
		#விளைவிடு('   ' + உள்ளீட்டுக்கோப்புப்பட்டி3_strip_join)

		
		time.sleep(1)

		துணைப்பக்கப்பெயர் = உள்ளீட்டுக்கோப்புப்பட்டி3_strip[0] # விரிதாளின்படி,columnA, உருவாக்கவுள்ள நூற்த்துணைப்பக்கம்
		துணைப்பக்கப்பெயர்பிரி = துணைப்பக்கப்பெயர்.split('/')[0]
		அட்டவணைப்பெயர்சுத்தம் = str(துணைப்பக்கப்பெயர்பிரி).strip()
		துணைப்பக்கப்பெயர்பிரியெண்1மூன்றிலக்கம் = துணைப்பக்கப்பெயர்.split('/')[-1].split('-')[0]
		துணைப்பக்கப்பெயர்பிரியெண்1 = int(துணைப்பக்கப்பெயர்.split('/')[-1].split('-')[0])
		துணைப்பக்கப்பெயர்பிரியெண்2 = துணைப்பக்கப்பெயர்.split('/')[-1].split('-')[-1]
		முன்துணைப்பக்கயெண் = துணைப்பக்கப்பெயர்பிரியெண்1-1 
		முன்துணைப்பக்கயெண்மூன்றிலக்கம் = '0' + str(முன்துணைப்பக்கயெண்)
		முன்துணைப்பக்கயெண்மூன்றிலக்கம்கூட்டு = முன்துணைப்பக்கயெண்மூன்றிலக்கம் + '-' + துணைப்பக்கப்பெயர்பிரியெண்2
		பின்துணைப்பக்கயெண் = துணைப்பக்கப்பெயர்பிரியெண்1+1
		பின்துணைப்பக்கயெண்மூன்றிலக்கம் = '0' + str(பின்துணைப்பக்கயெண்)
		பின்துணைப்பக்கயெண்மூன்றிலக்கம்கூட்டு = பின்துணைப்பக்கயெண்மூன்றிலக்கம் + '-' + துணைப்பக்கப்பெயர்பிரியெண்2 
		முன்துணைப்பக்கத்தலைப்பு = உள்ளீட்டுக்கோப்புப்பட்டி3_strip[1] # விரிதாளின்படி,  columnB, முன்புள்ள தலைப்பு
		உருவாக்கும்தலைப்பு= உள்ளீட்டுக்கோப்புப்பட்டி3_strip[2] # விரிதாளின்படி,  columnC, உருவாக்கும் தலைப்பு
		பின்துணைப்பக்கத்தலைப்பு = உள்ளீட்டுக்கோப்புப்பட்டி3_strip[3] # விரிதாளின்படி, columnD, அடுத்தத்தலைப்பு
		உருவாக்கும்தலைப்புபக்கத்தொடக்கம் = உள்ளீட்டுக்கோப்புப்பட்டி3_strip[-2] # விரிதாளின்படி, columnE, தலைப்புத்தொடங்கும் பக்க எண்.
		உருவாக்கும்தலைப்புபக்கத்தொடக்கம்கூட்டெண் = int(உருவாக்கும்தலைப்புபக்கத்தொடக்கம்) + பக்கயெண்வேறுபாடு
		உருவாக்கும்தலைப்புபக்கமுடிவு = உள்ளீட்டுக்கோப்புப்பட்டி3_strip[-1] # விரிதாளின்படி, columnF, தலைப்புத்தொடங்கும் பக்க எண். 
		உருவாக்கும்தலைப்புபக்கமுடிவுகூட்டெண் = int(உருவாக்கும்தலைப்புபக்கமுடிவு)-1 + பக்கயெண்வேறுபாடு
	 
		#விளைவிடு( str(வரிசையெண்+1) + '. ' + columnA + '~' +columnB + '~' + columnC + '~' + columnD + '~' + columnE + '~' + str(பக்கயெண்வேறுபாடு) + '\n')
		
		மொழித்திட்டம்    = pywikibot.Site('ta','wikisource') 
		உரலி = pywikibot.Page(மொழித்திட்டம், துணைப்பக்கப்பெயர்)
		உரலித்தரவு = உரலி.text
		
		தரவுள்ளத்துணைப்பக்கம் = len(உரலித்தரவு)
		if தரவுள்ளத்துணைப்பக்கம் != 0:
			விளைவிடு('   ' + str(வரிசையெண்+1) + '. ' + துணைப்பக்கப்பெயர் + ' என்ற துணைப்பக்கத்தரவு உருவாக்கப் பட்டிருக்கிறது.') 
		
		elif தரவுள்ளத்துணைப்பக்கம் == 0:
			விளைவிடு('   ' + str(வரிசையெண்+1) + '. ' + துணைப்பக்கப்பெயர் + ' என்ற துணைப்பக்கத்தரவு உருவாக்கப் படவில்லை.') 
			
			துணைப்பக்கயெண்விவரம் = '<pages index="' + அட்டவணைப்பெயர்சுத்தம் + '.pdf" from="' + str(உருவாக்கும்தலைப்புபக்கத்தொடக்கம்கூட்டெண்) + '"' + 'to="' +  str(உருவாக்கும்தலைப்புபக்கமுடிவுகூட்டெண்) + '"' + 'fromsection=" " tosection=" " />'
			#<pages index=" கால்டுவெல் ஒப்பிலக்கணம்.pdf" from="20" to="23"  fromsection="" tosection="" />
			# | previous   =[[../001-013/|← 1. உயிரினும்...!]]
			# | next       = [[../003-013/| 3. கோலொடு நின்றான்! →]]
			
			உரலி.text =  '''
{{header	
 | title	      = [[../]]
 | author     =  ''' + அந்நூலாசிரியர் + ''' 
 | translator = 
 | section    = ''' + உருவாக்கும்தலைப்பு + '''
 | previous   = ''' + '[[../' + முன்துணைப்பக்கயெண்மூன்றிலக்கம்கூட்டு + '/|← ' + முன்துணைப்பக்கத்தலைப்பு + ']]' + '''
 | next       = ''' + '[[../' + பின்துணைப்பக்கயெண்மூன்றிலக்கம்கூட்டு + '/|' + பின்துணைப்பக்கத்தலைப்பு + ' →]]' + '''
 | notes	  =  <b> மொழிபெயர்த்தவர்கள்: </b> [[ஆசிரியர்:காழி. சிவ. கண்ணுசாமி பிள்ளை|காழி. சிவ. கண்ணுசாமி பிள்ளை]], [[ஆசிரியர்:கா. அப்பாத்துரைப் பிள்ளை|K. அப்பாத்துரைப் பிள்ளை]]
}}''' + 	'\n\n' + துணைப்பக்கயெண்விவரம்
			print("----------------------------  தொடக்கப்பக்க2 முழுத்தரவு  தொடக்கம்  --------------------------------------") 
			print(உரலி.text)
			print("----------------------------  தொடக்கப்பக்க2 முழுத்தரவு  முடிந்தது  --------------------------------------")
			time.sleep(15)
			உரலி.save('~' + துணைப்பக்கயெண்விவரம் )			



# முனையத்தில் இறுதியாக தெரிவதற்காக , கீழுள்ள வரியெண்ணிக்கைகளைத் தருகிறேன்.			
emptyNum = பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி)-பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி3)
விளைவிடு('\n   இக்கோப்பிலுள்ள வெற்று வரிகளின் எண்ணிக்கை  =  ' + str(emptyNum))
விளைவிடு('   இக்கோப்பிலுள்ள தரவுள்ள வரிகளின் எண்ணிக்கை = ' + str(பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி3)))
விளைவிடு('   இக்கோப்பிலுள்ள மொத்த சொல்வரியெண்ணிக்கை = ' + str(பட்டியெண்ணிக்கை(உள்ளீட்டுக்கோப்புப்பட்டி)) + '\n')

#===	 செய்ய வேண்டியன ===
# கோப்பிடங்களுக்கான பைத்தான் நூற்கட்டங்களைக் கொண்டு, கோப்பு உள்ளதா? என அறிய நுட்பம் அமைக்கணும்.
# ஒரு வரி பைத்தான் போன்று, இன்னும் நிரல்களை சுருக்க வேண்டும். # http://www.onelinerizer.com/