혼자보기위한python🌘textfile1️⃣

이풀싹·2023년 6월 19일
0

파이썬_BASIC

목록 보기
11/13
post-thumbnail

1️⃣read()/ readline()/readlines()

💛(1) read()

f=open('/Users/choa/Desktop/5674-734/stockcode.txt','r',encoding='cp949')
data=f.read()
print(data)
f.close()

💛(2) readline()

f=open('/Users/choa/Desktop/5674-734/stockcode.txt','r',encoding='cp949')
line_num=1
line=f.readline()
while line:
    print("%d %s"%(line_num,line),end='')
    line=f.readline()
    line_num+=1

f.close()

💛(3) readlines()

f=open('/Users/choa/Desktop/5674-734/stockcode.txt','r',encoding='cp949')
lines=f.readlines()
for line_num,line in enumerate(lines):
    print('%d_%s'%(line_num+1,line))
f.close()

readline() 🆚 readlines()

  • 🐰💭 readline(): readline() 함수는 파일에서 한 줄씩 읽어옵니다. 읽어온 줄은 문자열로 반환됩니다. 읽어온 줄에는 개행 문자 \n이 포함되어 있으며, 반환된 문자열도 개행 문자를 포함합니다. 따라서, readline() 함수로 한 줄을 읽을 때 개행 문자까지 포함하여 출력됩니다.
  • 🐰💭readlines(): readlines() 함수는 파일의 모든 줄을 읽어와 리스트로 반환합니다. 각 줄은 리스트의 요소로 저장되며, 개행 문자 \n은 각 요소의 끝에 포함됩니다. 따라서, readlines() 함수로 모든 줄을 읽을 때 개행 문자까지 포함하여 출력됩니다.
    예를 들어, 다음과 같은 파일이 있다고 가정합니다:
Hello
World

readline() 함수로 한 줄을 읽으면 개행 문자를 포함한 문자열이 반환됩니다❗:

f = open('file.txt', 'r')
line = f.readline()
print(line)  # 'Hello\n'
f.close()

readlines()함수로 모든 줄을 읽으면 개행 문자를 포함한 리스트가 반환됩니다❗:

f = open('file.txt', 'r')
lines = f.readlines()
print(lines)  # ['Hello\n', 'World\n']
f.close()

개행 문자를 포함하여 출력되는 것은 readline() 함수와 readlines() 함수의 동작 방식에 따른 결과입니다.


2️⃣write()/writelines()

💛(1) write()

text=input("파일에 저장할 내용을 입력하세요@^@")
f=open('mydata.txt','w')
f.write(text)
f.close()

💛(2) writelines()

count=1
data=[]
print('파일에 내용을 저장하려면 내용을 입력하지 말고 [Enter]키를 누르세요')
while True:
    text=input("[%d]파일에 저장할 내용을 입력하세요."%count)
    if text=='':
        break
    data.append(text+'\n')
    count+=1

f=open('mydata.txt','w')
f.writelines(data)
f.close()

write()와 writelines()는 모두 파일에 데이터를 쓰는 함수입니다. 그러나 사용 방식과 동작에 차이가 있습니다.

write() 🆚 writelines()

  • 🐰💭write(): write() 함수는 인자로 전달된 문자열을 파일에 씁니다. 이 함수는 단일한 문자열만을 받을 수 있으며, 개행 문자를 자동으로 추가하지 않습니다. 따라서, 개행 문자를 직접 추가해주어야 합니다.

예시:

f = open('file.txt', 'w')
f.write('Hello')
f.write('World')
f.close()

위의 코드는 'file.txt' 파일에 "HelloWorld"라는 내용을 씁니다.

  • 🐰💭writelines(): writelines() 함수는 여러 줄의 문자열을 파일에 씁니다. 인자로 전달된 문자열의 리스트나 이터러블 객체를 받아들여 각 요소를 파일에 씁니다. writelines() 함수는 개행 문자를 추가하지 않으므로, 각 문자열 요소가 개행 문자로 구분된다면 개행 문자도 직접 포함해야 합니다.

예시:

f = open('file.txt', 'w')
lines = ['Hello\n', 'World\n']
f.writelines(lines)
f.close()

위의 코드는 'file.txt' 파일에 "Hello"와 "World"를 개행하여 씁니다.

따라서, write() 함수는 단일 문자열을 파일에 쓸 때 사용하고, writelines() 함수는 여러 줄의 문자열을 파일에 쓸 때 사용합니다.


3️⃣텍스트 파일/바이너리 파일 복사하기

💛(1) 텍스트 파일 복사하기

f=open('/Users/choa/Desktop/5674-734/stockcode.txt','r',encoding='cp949')
h=open('/Users/choa/Documents/python/stockcode_copy.txt','w')

data=f.read()
h.write(data)

f.close()
h.close()

💛(2) 바이너리 파일 복사하기

bufsize=1024
f=open('/Users/choa/Desktop/5674-734/img_sample.jpg','rb')
h=open('img_sample_copy.jpg','wb')

data=f.read(bufsize)
while data:
    h.write(data)
    data=f.read(bufsize)

f.close()
h.close()

바이너리 파일은 텍스트 파일과 달리 인코딩을 지정할 필요가 없습니다. 바이너리 파일은 텍스트가 아닌 이진 데이터로 구성되어 있기 때문에 인코딩이나 디코딩 과정이 필요하지 않습니다.

바이너리 파일을 열 때는 파일을 바이너리 모드('rb' 또는 'wb')로 열어야 합니다. 'rb' 모드는 바이너리 파일을 읽기 모드로 열고, 'wb' 모드는 바이너리 파일을 쓰기 모드로 엽니다.

예를 들어, 바이너리 파일을 읽고 복사하는 코드는 다음과 같습니다:

with open('input.bin', 'rb') as f:
    data = f.read()

with open('output.bin', 'wb') as h:
    h.write(data)

위의 코드에서 'input.bin'은 읽을 바이너리 파일의 경로이고, 'output.bin'은 쓸 바이너리 파일의 경로입니다. rb 모드로 파일을 열어 데이터를 읽고, wb 모드로 파일을 열어 데이터를 씁니다. 인코딩 매개변수를 사용하지 않는 것에 유의해 주세요.

  • 🐰💭 컴퓨터에서 파일 크기를 표현하는 단위인 킬로바이트(KB)는 1024 바이트를 의미합니다. 따라서, 1KB는 1024 바이트를 의미합니다.

만약 파일을 256KB 단위로 읽고 싶은경우에는 bufsize를 256*1024로 정의하면 됩니다!


4️⃣ 파일을 열고 자동으로 닫기 (with~as)

with open('/Users/choa/Desktop/5674-734/stockcode.txt','r',encoding='cp949')as f:
    for line_num,line in enumerate(f.readlines()):
        print("%d_%s"%(line_num,line),end='')

  • 🐰💭 with~as문은 파일이나 리소스와 같은 객체를 사용한 후에 자동으로 정리(clean-up)하기 위해 사용되는 구문입니다. with문을 사용하면 파일을 열거나 다른 리소스를 사용한 후에 별도의 close() 함수를 호출하지 않아도 됩니다.

일반적으로 파일을 다룰 때 open() 함수로 파일을 열고, 작업을 마친 후에 close() 함수로 파일을 닫아야 합니다. 그러나 with문을 사용하면 파일을 열고 사용한 후에 자동으로 파일을 닫아줍니다. 이렇게 함으로써 파일을 열고 닫는 과정을 명시적으로 처리하지 않아도 되므로 코드가 더 간결해집니다.

with문은 다음과 같은 구문으로 사용됩니다:

with open('파일경로', '모드') as 파일객체:
    # 파일을 사용하는 코드
    # 파일객체를 통해 파일을 읽거나 쓰는 작업을 수행

with문은 파일객체를 생성하고 해당 블록 내에서 사용한 후에 자동으로 파일을 닫아줍니다. 파일 객체를 파일객체라는 변수에 할당하고, 해당 변수를 통해 파일을 읽거나 쓰는 작업을 수행합니다. with문을 빠져나오면 파일 객체가 자동으로 닫힙니다.


5️⃣ㅍㅏ일의 특정 부분만 복사하기(seek,read,write)

spos=105
size=500

f=open('/Users/choa/Desktop/5674-734/stockcode.txt','r',encoding='cp949')
h=open('/Users/choa/Documents/python/stockcode_2.txt','w')

f.seek(spos)
data=f.read(size) # ?? 
h.write(data)

h.close()
f.close()

🐰💭 특정 위치에서부터 일정 크기만큼 데이터를 읽어와서 다른 파일에 쓰는 예시
1. spos 변수는 파일에서 데이터를 읽을 시작 위치를 지정하는 변수입니다. 이 값은 파일 내에서의 오프셋(offset)을 나타냅니다.
2. size 변수는 읽어올 데이터의 크기를 지정하는 변수입니다. 이 값은 바이트 단위로 지정됩니다.

f.seek(spos)
data = f.read(size)

위의 코드는seek() 메서드를 사용하여 파일 포인터를 spos 위치로 이동시킵니다. 파일 포인터는 파일 내에서 현재의 위치를 가리키는 역할을 합니다. seek() 메서드를 사용하여 파일 포인터를 이동시킨 후,해당 위치에서부터 size만큼의 데이터를 읽어옵니다. read() 메서드를 사용하여 읽어온 데이터는 data 변수에 저장됩니다.

h.write(data)

어온 데이터인 data를 다른 파일에 씁니다. write()메서드를 사용하여 데이터를 파일에 씁니다.

마지막으로 h.close()와 f.close()를 사용하여 파일 객체를 닫아줍니다. 파일을 사용한 후에는 항상 파일을 닫아 리소스를 해제하는 것이 좋습니다.

따라서, 주어진 코드는 stockcode.txt 파일에서 spos 위치부터 size 크기만큼의 데이터를 읽어와서 stockcode_2.txt 파일에 쓰는 기능을 수행합니다.


6️⃣파일 크기 구하기

from os.path import getsize

file1='/Users/choa/Desktop/5674-734/stockcode.txt'
file2='/Users/choa/Desktop/5674-734/img_sample.jpg'
file_size1=getsize(file1)
file_size2=getsize(file2)

print('File Name:%s\tFile Size:%d'%(file1,file_size1))
print('File Name:%s\tFile Size:%d'%(file2,file_size2))

os.path 모듈getsize() 함수를 사용하여 파일의 크기를 가져옵니다.

os.path 모듈은 파일 경로와 관련된 작업을 수행하기 위한 함수들을 제공하는 파이썬 내장 모듈입니다. 몇 가지 os.path 모듈의 주요 함수와 속성을 살펴보겠습니다:

경로관련설명
os.path.abspath(path)주어진 경로의 절대 경로를 반환합니다.
os.path.basename(path)주어진 경로의 기본 파일 이름을 반환합니다.
os.path.dirname(path)주어진 경로의 디렉토리 이름을 반환합니다.
os.path.exists(path)주어진 경로가 존재하는지 여부를 확인합니다.
os.path.isfile(path)주어진 경로가 파일인지 여부를 확인합니다.
os.path.isdir(path)주어진 경로가 디렉토리인지 여부를 확인합니다.
os.path.join(path1, path2, ...)주어진 경로 요소들을 연결하여 새로운 경로를 생성합니다.
os.path.split(path)주어진 경로를 디렉토리 부분과 파일 부분으로 나누어 튜플로 반환합니다.
os.path.splitext(path)주어진 경로의 확장자를 포함하지 않은 파일 이름과 확장자를 튜플로 반환합니다.
os.path.getsize(path)주어진 경로의 파일 크기를 반환합니다.
os.path.isabs(path)주어진 경로가 절대 경로인지 여부를 확인합니다.
os.path.normpath(path)주어진 경로를 정규화하여 반환합니다.

7️⃣파일삭제하기 os.remove

from os import remove

target_file='/Users/choa/Documents/python/stockcode_2.txt'
k=input('[%s]파일을 삭제하겠습니까?(y/n)'%target_file)
if k=='y':
    remove(target_file)
    print('[%s]를 삭제했습니다'%target_file)

os 모듈은 파이썬의 표준 라이브러리 중 하나로, 운영 체제와 상호 작용하기 위한 다양한 기능을 제공합니다. 몇 가지 주요한 os 모듈의 기능은 다음과 같습니다:

파일 및 디렉토리 작업설명
os.remove(path)파일을 삭제합니다.
os.rename(src, dst)파일 또는 디렉토리의 이름을 변경합니다.
os.mkdir(path)디렉토리를 생성합니다.
os.rmdir(path)디렉토리를 삭제합니다.

0개의 댓글