IT ์•Œ์•„๊ฐ€๊ธฐ

[์ฝ”๋”ฉ ํ”์ ] 10์ดˆ๋งŒ์— doc ํŒŒ์ผ์„ docx ํŒŒ์ผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฒ• (์ฝ”๋“œ์ฒจ๋ถ€, ์ดˆ๋ณด์ž์šฉ ์„ค๋ช… ํฌํ•จ)

์žก์‹๋ƒฅ์ด 2025. 2. 24. 13:02

[์ฝ”๋”ฉํ”์ ] DOC ํŒŒ์ผ์„ DOCX๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ


์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ DOC์„ DOCX๋กœ ๋ฐ”๊พธ๋Š” ์ฝ”๋“œ 

import os
import win32com.client

def convert_doc_to_docx(input_folder, output_folder):
    # ์ถœ๋ ฅ ํด๋”๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ
    os.makedirs(output_folder, exist_ok=True)

    word = win32com.client.Dispatch("Word.Application")
    word.Visible = False

    for root, dirs, files in os.walk(input_folder):
        for file in files:
            if file.endswith(".doc") and not file.endswith(".docx"):
                doc_path = os.path.join(root, file)
               
                # โœ… ๋ณ€ํ™˜๋œ ํŒŒ์ผ์„ output_folder์— ์ €์žฅํ•˜๋„๋ก ๋ณ€๊ฒฝ
                docx_path = os.path.join(output_folder, file + "x")

                try:
                    doc = word.Documents.Open(doc_path)
                    doc.SaveAs(docx_path, 16)  # 16: wdFormatDocumentDefault (docx)
                    doc.Close()
                    print(f"Converted: {file} -> {os.path.basename(docx_path)}")
                except Exception as e:
                    print(f"Error converting {file}: {e}")

    word.Quit()
    print(f"๋ชจ๋“  .doc ํŒŒ์ผ์ด {output_folder} ํด๋”์— ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!")

# ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฒฝ๋กœ
input_folder = input("๐Ÿ“ ๋ณ€ํ™˜ํ•  ํด๋” ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ").strip()
output_folder = input("๐Ÿ“ ๋ณ€ํ™˜๋œ ํŒŒ์ผ ์ €์žฅํ•  ํด๋” ๊ฒฝ๋กœ ์ž…๋ ฅํ•˜์„ธ์š”: ").strip()

# ์‹คํ–‰ ์ฝ”๋“œ
convert_doc_to_docx(input_folder, output_folder)

 

DOC๊ณผ DOCX์˜ ์ฐจ์ด์ 

์›Œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์„œ ํŒŒ์ผ์€ .doc๊ณผ .docx์˜ ๋‘๊ฐ€์ง€ ํ˜•์‹์ด ์žˆ๋‹ค. 

 

์ผ๋‹จ ๋‘˜์˜ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ฐจ์ด๋Š” ๊ตฌํ˜•๊ณผ ์‹ ํ˜•์ด๋ผ๋Š” ์ ์ด๋‹ค. .doc๋Š” 2003๋…„ ์ด์ „์˜ ์›Œ๋“œ ๋ฌธ์„œ ํ˜•์‹์ด๊ณ , .docx๋Š” 2007๋…„ ์ดํ›„์˜ ์›Œ๋“œ ๋ฌธ์„œ ํ˜•์‹์ด๋‹ค. 

 

๊ตฌ์ฒด์ ์ธ ์ฐจ์ด์ ์€ doc๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ, docx๋Š” XML(์••์ถ•๋œ ZIP ํŒŒ์ผ)์ด๋ผ๋Š” ์ ์ด๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์—†๋Š” ํ˜•ํƒœ์˜ 0๊ณผ 1์˜ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์„œ ํŒŒ์ผ์ด ์†์ƒ๋˜๋ฉด ๋ณต๊ตฌ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋ฐ˜๋ฉด XML์€ eXtensible Markup Language์˜ ์•ฝ์ž๋กœ, ๋ฌธ์„œ์˜ ํ…์ŠคํŠธ ์„œ์‹ ์ด๋ฏธ์ง€๊ฐ€ XML ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„์–ด ์ €์žฅ๋˜๋ฉฐ ์ด๊ฒƒ์„ ZIP์œผ๋กœ ์••์ถ•ํ•˜๋Š” ํ˜•ํƒœ์ด๋‹ค. ๋ฌธ์„œ ๋‚ด์šฉ์ด ๋ณ„๋„์˜ XML ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๊ธฐ ๋–„๋ฌธ์— ๊ตฌ์กฐ์ ์œผ๋กœ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ์œผ๋ฉฐ, ZIP์œผ๋กœ ์••์ถ•์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ์ฒ˜๋ฆฌ ์†๋„๋„ ๋น ๋ฅด๋‹ค. ์†์ƒ๋œ ๊ฒฝ์šฐ์—๋„ ๊ฐœ๋ณ„ XML ํŒŒ์ผ์„ ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•ด์„œ ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์žฅ์ ์ด ์žˆ๋‹ค. 

 

DOC์„ DOCX๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ๊นŒ๋‹ญ์€ ์ตœ์‹ ๋ฒ„์ „ ์›Œ๋“œ์—์„œ ํ˜ธํ™˜์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด์„œ, ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ๊ฐ์†Œํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋‹ค์–‘ํ•œ ์„œ์‹๊ณผ ๊ธฐ๋Šฅ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๋Š” chatGPT์—์„œ GPTs ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, doc ํŒŒ์ผ์€ ์ธ์‹์„ ๋ชปํ•ด์„œ ๋ณ€ํ™˜์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 

DOC์„ DOCX๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ• 

๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์‚ฌ์‹ค ์•„์ฃผ ๋‹จ์ˆœํ•˜๋‹ค. ํŒŒ์ผ์„ ์›Œ๋“œ๋กœ ๋“ค์–ด๊ฐ€์„œ ๋‹ค๋ฅธ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅธ๋’ค ํ˜•์‹์„ docx๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋์ด๋‹ค. 

 

๊ทธ๋Ÿฌ๋‚˜, ๋‚˜์ฒ˜๋Ÿผ 1000๊ฐœ์˜ doc ํŒŒ์ผ์„ docx๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์ด๊ฒƒ์ด ์กฐ๊ธˆ ๊ณค๋ž€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ python ์ฝ”๋“œ๋กœ microsoft word๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹์„ ํ†ตํ•ด์„œ ์ž๋™์œผ๋กœ ์›Œ๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด ๋œ๋‹ค. 

 

์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” pywin32์ด๋‹ค! 

pywin32๋Š” ์œˆ๋„์šฐ์˜ Microsoft Office ํ”„๋กœ๊ทธ๋žจ์„ ์ž๋™์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. 

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์šฐ๋ฆฌ๊ฐ€ ์›Œ๋“œ์—์„œ ์‹ค์ œ๋กœ ๋‹ค๋ฅธ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ๋ช…์„ ์ €์žฅํ•˜๋“ฏ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค. 

 

๋Œ€๋žต์ ์ธ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์œ„์˜ ์ฝ”๋“œ ์ „๋ฌธ์— ๋ฐ˜์˜๋˜์–ด ์žˆ์œผ๋‹ˆ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค! 

 

  1. win32com.client.Dispatch("Word.Application") → Word ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
  2. Documents.Open(ํŒŒ์ผ ๊ฒฝ๋กœ) → .doc ํŒŒ์ผ ์—ด๊ธฐ
  3. Documents.SaveAs(๋ณ€ํ™˜๋œ ํŒŒ์ผ ๊ฒฝ๋กœ, 16) → .docx๋กœ ์ €์žฅ
  4. Documents.Close() → ํŒŒ์ผ ๋‹ซ๊ธฐ
  5. Word.Quit() → Word ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ

์ดˆ๋ณด์ž์šฉ ์ฝ”๋“œ ์„ค๋ช… 

ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์‹œํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋ชฐ๋ž๋˜ ์‹œ์ ˆ์ด ์‚ฌ์‹ค ์–ผ๋งˆ ์ง€๋‚˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์ดˆ๋ณด ์ฝ”๋“œ ์„ค๋ช…๋„ ๋ง๋ถ™์—ฌ๋ณด๊ฒ ๋‹ค.   

 

1) ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ์ค€๋น„ํ•ด์•ผํ•œ๋‹ค. 

A. Python ๋‹ค์šด๋กœ๋“œ: python.org ์—์„œ ์ตœ์‹  ๋ฒ„์ „์˜ Python์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•œ๋‹ค. 
โ€ป ์„ค์น˜ํ•  ๋•Œ "Add Python to PATH" ์˜ต์…˜์„ ์„ ํƒํ•˜๋ฉด ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ Python์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

B. ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜: ํ„ฐ๋ฏธ๋„/๋ช…๋ น ํ”„๋กฌํ”„ํŠธ(cmd)๋ฅผ ์—ด๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. 

pip install pywin32

pip install os

 

2)  ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ณ  ์‹คํ–‰ํ•œ๋‹ค

A. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๊ฒƒ์„ ์ƒˆ ํŒŒ์ผ๋กœ ์ €์žฅ: ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ ์ด๋ฆ„์„ convert_doc_to_docx.py๋ผ๊ณ  ํ•˜๊ณ , ํŒŒ์ผ์€ C:\myprojects ์— ์ €์žฅํ–ˆ๋‹ค๊ณ  ํ•˜์ž. 

B. ๋ช…๋ นํ”„๋กฌํ”„ํŠธ(cmd)๋ฅผ ์—ด๊ณ  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค 

  • cmd ์ฐฝ์—์„œ ๋‚ด ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋”๋กœ ์ด๋™ํ•œ๋‹ค. cd C:\myprojects
  • python convert_doc_to_docx.py

C. ๊ทธ๋Ÿฌ๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด์„œ ํ„ฐ๋ฏธ๋„์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

  • ๐Ÿ“ ๋ณ€ํ™˜ํ•  ํด๋” ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” :
  • ์—ฌ๊ธฐ์— .doc ํŒŒ์ผ๋“ค์ด ๋“ค์–ด์žˆ๋Š” ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. 

D. ๋‹ค์Œ์œผ๋กœ๋Š” ์ €์žฅํ•  ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

  • ๐Ÿ“ ๋ณ€ํ™˜๋œ ํŒŒ์ผ ์ €์žฅํ•  ํด๋” ๊ฒฝ๋กœ ์ž…๋ ฅํ•˜์„ธ์š”:
  • ๊ฐ ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค! 

์ด๋ ‡๊ฒŒ DOC ํŒŒ์ผ์„ ํ•œ๋ฒˆ์— DOCX๋กœ ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค! 

728x90