Skip to content

Commit 52120c6

Browse files
author
ys88sem.kim
committed
add 2022-03-28 add practical python pdf, docx, excel example
1 parent 1c297ac commit 52120c6

18 files changed

Lines changed: 3311 additions & 0 deletions

‎practical_python/census2020.txt‎

Lines changed: 3143 additions & 0 deletions
Large diffs are not rendered by default.
2.14 MB
Binary file not shown.

‎practical_python/chapter12excel.py‎

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import openpyxl, pprint
2+
from openpyxl.cell import *
3+
from openpyxl.styles import Font
4+
5+
wb = openpyxl.load_workbook('example.xlsx')
6+
print(type(wb))
7+
8+
print(wb.get_sheet_names()) # 시트 이름 얻기
9+
sheet1 = wb.get_sheet_by_name('Sheet1')
10+
print(sheet1['A1'].value) # 데이터 얻는방법 첫번째
11+
12+
for i in range (1, 8, 2):
13+
print(i, sheet1.cell(row=i, column=2).value) # 데이터를 얻는 방법 두번째
14+
15+
# 튜플에 저장
16+
temp = tuple(sheet1['A1':'C3'])
17+
for rowOfCellObjects in temp:
18+
for cellObj in rowOfCellObjects:
19+
print(cellObj.coordinate, cellObj.value)
20+
21+
# 두번째 엑셀
22+
wb = openpyxl.load_workbook('censuspopdata.xlsx')
23+
sheet_census = wb.get_sheet_by_name('Population by Census Tract')
24+
countyData = {}
25+
26+
# 통계 데이터를 가져온다
27+
for row in range(2, sheet_census.max_row + 1):
28+
state = sheet_census['B'+str(row)].value
29+
county = sheet_census['C'+str(row)].value
30+
pop = sheet_census['D'+str(row)].value
31+
32+
countyData.setdefault(state, {})
33+
countyData[state].setdefault(county, {'tracts':0,'pop':0})
34+
35+
countyData[state][county]['tracts'] += 1
36+
countyData[state][county]['pop'] += int(pop)
37+
38+
print('write results...')
39+
resultFile = open('census2020.txt', 'w')
40+
resultFile.write('allData=' + pprint.pformat(countyData))
41+
resultFile.close()
42+
print('Done')
43+
44+
# update example
45+
wb = openpyxl.load_workbook('produceSales.xlsx')
46+
sheet_produce = wb.get_sheet_by_name('Sheet')
47+
48+
PRICE_UPDATE = {'Garlic':3.07, 'Celery': 1.19, 'Lemon' : 1.27}
49+
50+
for rowNum in range (2, sheet_produce.max_row):
51+
produceName = sheet_produce.cell(row=rowNum, column=1).value
52+
if produceName in PRICE_UPDATE:
53+
sheet_produce.cell(row=rowNum, column=2).value = PRICE_UPDATE[produceName]
54+
55+
wb.save('updateProduceSales.xlsx')
56+
57+
# math

‎practical_python/chapter13_docx.py‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import docx
2+
3+
def getText(fileName):
4+
doc = docx.Document(fileName)
5+
fullText = []
6+
for para in doc.paragraphs:
7+
fullText.append(para.text)
8+
return '\n'.join(fullText)
9+
10+
#example 1
11+
doc = docx.Document('demo.docx') #document 객체
12+
len(doc.paragraphs) # paragraph 객체리스트를 가지고 있다 (문단)
13+
print(doc.paragraphs[0].text)
14+
print(doc.paragraphs[1].text)
15+
print(doc.paragraphs[1].runs)
16+
print(doc.paragraphs[1].runs[0].text) # runs 객체의 리스트
17+
print(doc.paragraphs[1].runs[1].text)
18+
print(doc.paragraphs[1].runs[2].text)
19+
print(doc.paragraphs[1].runs[3].text)
20+
print(getText('demo.docx'))
21+
22+
#style -> deprecated (https://m.blog.naver.com/sangja84/221530974938)
23+
#print(doc.paragraphs[0].style)
24+
#doc.paragraphs[0].style = 'Normal'
25+
#doc.paragraphs[1].runs[0].style = 'QuoteChar'
26+
#doc.paragraphs[1].runs[1].underline = True
27+
#doc.paragraphs[1].runs[3].underline = True
28+
#doc.save('restyled.docx')
29+
30+
# save
31+
doc = docx.Document()
32+
doc.add_paragraph('hello world')
33+
paraObject1 = doc.add_paragraph('this is a second paragraph.')
34+
paraObject2 = doc.add_paragraph('this is a yet another paragraph')
35+
paraObject1.add_run('\nthis text is being added to the second paragraph')
36+
doc.save('helloworld.docx')

‎practical_python/chapter13_pdf.py‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import PyPDF2
2+
3+
pdfFileObj = open('meetingminutes.pdf', 'rb') # 이진 데이터 읽기
4+
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
5+
print(pdfReader.numPages)
6+
pageObj = pdfReader.getPage(0) #페이지 객체 만들기
7+
print(pageObj.extractText()) # 페이지 객체에서 텍스트 추출
8+
9+
# encrypted pdf
10+
pdfReader = PyPDF2.PdfFileReader(open('encrypted.pdf','rb'))
11+
if pdfReader.isEncrypted:
12+
pdfReader.decrypt('rosebud')
13+
pageObj = pdfReader.getPage(0)
14+
print(pageObj.extractText())
15+
16+
#combined pdf
17+
pdfFile = open('meetingminutes.pdf','rb')
18+
pdfFile2 = open('meetingminutes2.pdf','rb')
19+
20+
pdfReader = PyPDF2.PdfFileReader(pdfFile)
21+
pdfReader2 = PyPDF2.PdfFileReader(pdfFile2)
22+
23+
pdfWriter = PyPDF2.PdfFileWriter()
24+
25+
pageObj = pdfReader.getPage(0)
26+
pdfWriter.addPage(pageObj)
27+
pageObj = pdfReader2.getPage(1)
28+
pdfWriter.addPage(pageObj)
29+
30+
pdfOutputFile = open('combineminutes.pdf','wb') # 파일 이진 쓰기모드로 열고
31+
pdfWriter.write(pdfOutputFile) # pdfWriter 를 통해 파일 경로에 쓰기
32+
# 중간 페이지 삽입이 안된다
33+
# addPage() 메소드는 마지막 페이지만 추가한다
34+
pdfOutputFile.close()
35+
pdfFile.close()
36+
pdfFile2.close()
37+
38+
#overwrite
39+
minutesFile = open('meetingminutes.pdf','rb')
40+
pdfReader = PyPDF2.PdfFileReader(minutesFile)
41+
minutesFirstPage = pdfReader.getPage(0)
42+
43+
pdfWatermarkReader = PyPDF2.PdfFileReader(open('watermark.pdf','rb'))
44+
minutesFirstPage.mergePage(pdfWatermarkReader.getPage(0))
45+
46+
pdfWriter = PyPDF2.PdfFileWriter()
47+
pdfWriter.addPage(minutesFirstPage)
48+
49+
resultPdfFile = open('watermarkedCover.pdf','wb')
50+
pdfWriter.write(resultPdfFile)
51+
minutesFile.close()
52+
resultPdfFile.close()
152 KB
Binary file not shown.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import openpyxl
2+
3+
4+
# 예제 안되넹 ;;;
5+
6+
7+
wb = openpyxl.Workbook()
8+
sheet = wb.get_sheet_by_name('Sheet')
9+
for i in range (1,11):
10+
sheet['A'+str(i)].value = i
11+
12+
referenceObject = openpyxl.charts.Reference(sheet, (1,1), (10,1))
13+
seriesObject = openpyxl.charts.Series(referenceObject, title='First series')
14+
chartObject = openpyxl.charts.BarChart()
15+
chartObject.append(seriesObject)
16+
17+
chartObject.drawing.top = 50
18+
chartObject.drawing.left = 100
19+
chartObject.drawing.width = 300
20+
chartObject.drawing.height = 200
21+
22+
sheet.add_chart(chartObject)
23+
wb.save('sampleChart.xlsx')

‎practical_python/demo.docx‎

41.6 KB
Binary file not shown.

‎practical_python/encrypted.pdf‎

309 KB
Binary file not shown.

‎practical_python/example.xlsx‎

9.67 KB
Binary file not shown.

0 commit comments

Comments
 (0)