python3 전화번호 파일 만들고 자르기

세벌의 이미지

전화번호만 죽 있는 파일에 형식을 몇개 넣고 커다란 파일을 여러개로 자르는 예제

제가 필요해서 여러분의 도움과 인터넷 검색을 통해 만든 것 정보 공유합니다. 초보라 어설픈 부분도 있지만 누군가에게 도움이 되리라 생각해서 올립니다. 더 깔끔한 방법 아시면 댓글로 알려주시며 감사.

전화번호만 있는 파일에 형식 넣기

def f(f_in, f_out):
    for line in f_in:
        stripped_line = line.strip()
        print("name" + "," + "name2" + "," + stripped_line, file=f_out)
 
 
fin=open("tel000.csv","r")
fout=open("formtel.csv","w")
 
f(fin, fout)

커다란 파일을 여러개로 자르기

myfile='formtel.csv'
 
lsline=[]
with open(myfile,'r') as rf:
    for row in rf:
        lsline.append(row)
 
outCount=1
lCnt=0
LPF=1000 # line per file
LeftLine=True
 
while LeftLine:
    cnt=0
    incr=(outCount-1) * LPF
    left= len(lsline) - incr
#    fName="mtel" + str(outCount*LPF) + ".csv"
    fName="mtel" + str(outCount) + ".csv"
    newLine=[]
    if left < LPF:
        while cnt< left:
            newLine.append(lsline[lCnt])
            cnt +=1
            lCnt+=1
        LeftLine=False
    else:
        while cnt< LPF:
            newLine.append(lsline[lCnt])
            cnt +=1
            lCnt+=1
    outCount+=1
    with open(fName,'w') as wf:
        wf.write("name1,name2,tel\n")
        for row in newLine:
            wf.write(row)
Forums: 
 의 이미지

만족스러울 만큼 깔끔한지 아닌지는 보는 사람 기준에 따라 다르겠지요.
저도 한 번 해 봤습니다.

그런 그렇고, "커다란 파일을 여러개로 자르기"를 최대한 파일 전체를 한번에 읽어들여 리스트로 만들지 않고 해 보려고 했는데, 생각대로 잘 됐는지 모르겠네요.
게다가 라인 수를 미리 세고 시작할 수가 없어서 empty라는 변수를 도입한데다가, 맨 뒤에 빈 파일이 하나 생기는 걸 막을 방법이 마땅치 않습니다. -_-;;

#!/usr/bin/python3
 
def f(f_in, f_out):
    for line in f_in:
        print("name", "name2", line, sep=',', end='', file=f_out)
 
def g(f_in, f_out_template, LPF):
    import itertools
    def slice_file(f):
        while True:
            yield itertools.islice(f, LPF)
 
    for no, lines in enumerate(slice_file(f_in), start=1):
        with open(f_out_template.format(no=no), "wt") as f_out:
            print("name1", "name2", "tel", sep=',', file=f_out)
            empty = True
            for line in lines:
                empty = False
                print(line, end='', file=f_out)
            if empty:
                return
 
if __name__ == "__main__":
    with open("tel000.csv","rt") as f_in, open("formtel.csv","w") as f_out:
        f(f_in, f_out)
    with open("formtel.csv", "rt") as f_in:
        g(f_in, "mtel{no:03d}.csv", 1000)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.