Latest web development tutorials

Python3 입력 및 출력

첫 몇 장에서는 실제로 파이썬 입출력 기능을 터치하고있다. 이 장에서는 우리는 파이썬 특정 입력과 출력을 소개합니다.


출력 형식은 아름답게

파이썬 방법이 출력 값 : 표현의 진술과 인쇄 () 함수.

세 번째 방법은 파일 객체의 쓰기 () 메소드를 사용하는 것입니다, 표준 출력 파일 참조 sys.stdout 사용할 수 있습니다.

좀 더 다양한 형태로 출력 할 경우 출력 값의 형식을 str.format () 함수를 사용할 수 있습니다.

당신은 출력의 문자열 값으로 설정하려는 경우, 당신은 달성하기에 repr () 또는 STR () 함수를 사용할 수 있습니다.

  • STR () 함수는 식의 사용자가 읽을 수있는 형태를 돌려줍니다.
  • 에 repr은 () : 읽을 수있는 표현 인터프리터의 형태를 생성합니다.

예를 들면

>>> s = 'Hello, w3big'
>>> str(s)
'Hello, w3big'
>>> repr(s)
"'Hello, w3big'"
>>> str(1/7)
'0.14285714285714285'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'x 的值为: ' + repr(x) + ',  y 的值为:' + repr(y) + '...'
>>> print(s)
x 的值为: 32.5,  y 的值为:40000...
>>> #  repr() 函数可以转义字符串中的特殊字符
... hello = 'hello, w3big\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, w3big\n'
>>> # repr() 的参数可以是 Python 的任何对象
... repr((x, y, ('Google', 'w3big')))
"(32.5, 40000, ('Google', 'w3big'))"

사각형 및 큐브 테이블 출력에 두 가지 방법이 있습니다 :

>>> for x in range(1, 11):
...     print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
...     # 注意前一行 'end' 的使用
...     print(repr(x*x*x).rjust(4))
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

>>> for x in range(1, 11):
...     print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

주 : 첫번째 예에서, 각 열 사이의 간격은 인쇄에 의해 첨가 하였다 ().

이 예는 오른쪽에 문자열, 그리고 왼쪽의 공간을 채울 수 rjust 문자열 객체 () 메서드를 보여줍니다.

이러한 ljust ()와 중앙 ()와 같은 유사한 방법이있다. 이 방법은 단지 새로운 문자열을 반환, 아무것도 기록하지 않습니다.

다음과 같이 또 다른 방법의 zfill는 ()는 왼쪽 숫자 0을 작성합니다 :

>>> '12'.zfill(5)
'00012'
>>> '-3.14'.zfill(7)
'-003.14'
>>> '3.14159265359'.zfill(5)
'3.14159265359'

다음과 같이 str.format () 기본 사용은 다음과 같습니다

>>> print('{}网址: "{}!"'.format('本教程', 'www.w3big.com'))
本教程网址: "www.w3big.com!"

그리고 괄호 문자 내부 (라는 형식 필드)의 형식 매개 변수 ()로 대체됩니다.

다음 괄호 안의 숫자 형식 위치 ()는, 수신 개체를 가리키는 데 사용된다 :

>>> print('{0} 和 {1}'.format('Google', 'w3big'))
Google 和 w3big
>>> print('{1} 和 {0}'.format('Google', 'w3big'))
w3big 和 Google

형식 키워드 인자 ()하면, 그 값은 변수의 이름을 가리키는 것이다.

>>> print('{name}网址: {site}'.format(name='本教程', site='www.w3big.com'))
本教程网址: www.w3big.com

위치 및 키워드 인수의 조합으로 지정할 수 있습니다 :

>>> print('站点列表 {0}, {1}, 和 {other}。'.format('Google', 'w3big',
                                                       other='Taobao'))
站点列表 Google, w3big, 和 Taobao。
'!의 A'및 (STR ()를 사용하여 ()를 repr ()를 사용)의 변환 전에 값의 서식을 사용할 수 있습니다 (아스키 ()를 사용하여) '연구를!' '들!'
>>> import math
>>> print('常量 PI 的值近似为: {}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。
>>> print('常量 PI 的值近似为: {!r}。'.format(math.pi))
常量 PI 的值近似为: 3.141592653589793。

옵션 ':'이름과 형식 식별자 다음은 필드 수 있습니다. 이것은 더 나은 가치 형식 수 있습니다. 다음의 예는 소수점 이하 세 자리에 파이를 유지합니다 :

>>> import math
>>> print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi))
常量 PI 的值近似为 3.142。

에서 ':'의 정수를 통과 한 후, 적어도 많은 도메인 폭이 있음을 보장 할 수 있습니다. 조경 양식을 사용할 때 유용합니다.

>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3}
>>> for name, number in table.items():
...     print('{0:10} ==> {1:10d}'.format(name, number))
...
w3big     ==>          2
Taobao     ==>          3
Google     ==>          1

당신은 긴 형식 문자열을 가지고, 당신은 좋은 일이 될 것입니다 변수 이름이 아닌 위치에 따라 포맷 할 때 다음 구분하지 않으려면.

가장 간단한 사전에 통과 한 다음 대괄호 '[]'키에 액세스하는 데 사용할 수 있습니다 :

>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3}
>>> print('w3big: {0[w3big]:d}; Google: {0[Google]:d}; '
          'Taobao: {0[Taobao]:d}'.format(table))
w3big: 2; Google: 1; Taobao: 3

또한, 동일한 기능을 달성하기 위해 "**"테이블 전에 변수를 사용할 수있다 :

>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3}
>>> print('w3big: {w3big:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table))
w3big: 2; Google: 1; Taobao: 3

이전 스타일 문자열 서식

% 연산자는 문자열 서식을 달성 할 수있다. 그것의 sprintf () 식하고 대체 오른쪽, 반환 된 문자열 형식의 예와 유사하다으로 왼쪽에 형식 문자열 인수 :

>>> import math
>>> print('常量 PI 的值近似为:%5.3f。' % math.pi)
常量 PI 的值近似为:3.142。

str.format () 함수는 비교적 새로운이기 때문에, 대부분의 파이썬 코드는 여전히 % 연산자를 사용합니다. 이 이전 형식은 결국 언어에서 제거됩니다 때문에, 더 str.format를 사용해야합니다 ().


읽기 키보드 입력

파이썬 입력의 입력 () 함수는 표준에서 텍스트의 라인을 판독하도록 설정 제공 기본 표준 입력은 키보드이다.

입력은 입력으로 파이썬 표현을 수신하고, 동작의 결과를 반환 할 수있다.

#!/usr/bin/python3

str = input("请输入:");
print ("你输入的内容是: ", str)

이 입력에 대응하는 다음과 같은 결과를

请输入:本教程
你输入的内容是:  本教程

파일을 읽고 쓰기

() 열려는 파일 객체를 반환하고, 다음과 같이 기본 구문은 다음과 같습니다

open(filename, mode)
  • 파일 이름 : 파일 이름 변수는 파일 이름을 액세스 할 값을 포함하는 문자열입니다.
  • 모드 : 모드 모드는 열려있는 파일을 결정 읽기, 추가, 작성합니다. 로 다음과 모든 가능한 값의 전체 목록을 참조하십시오. 이 비 필수 파라미터는 기본 파일 액세스 모드는 읽기 전용 (R)를.

파일의 다른 모드의 전체 목록을 엽니 다

모드 기술
연구 읽기 전용 모드로 파일을 엽니 다. 포인터 파일은 파일의 시작 부분에 위치한다. 이것은 디폴트 모드이다.
RB 읽기 전용 바이너리 형식의 파일을 엽니 다. 파일의 시작 부분에 포인터를 제출합니다. 이것은 디폴트 모드이다.
R + 읽기와 쓰기를위한 파일을 엽니 다. 파일의 시작 부분에 포인터를 제출합니다.
RB + 읽고 바이너리 형식으로 쓰기 위해 파일을 엽니 다. 파일의 시작 부분에 포인터를 제출합니다.
w 만 쓰기 위해 파일을 엽니 다. 파일이 이미 존재하는 경우는 덮어 쓰게됩니다. 파일이 존재하지 않으면, 새로운 파일을 생성한다.
WB 바이너리 형식으로 만 쓰기 위해 파일을 엽니 다. 파일이 이미 존재하는 경우는 덮어 쓰게됩니다. 파일이 존재하지 않으면, 새로운 파일을 생성한다.
w의 + 읽기와 쓰기를위한 파일을 엽니 다. 파일이 이미 존재하는 경우는 덮어 쓰게됩니다. 파일이 존재하지 않으면, 새로운 파일을 생성한다.
WB + 읽고 바이너리 형식으로 쓰기 위해 파일을 엽니 다. 파일이 이미 존재하는 경우는 덮어 쓰게됩니다. 파일이 존재하지 않으면, 새로운 파일을 생성한다.
추가의 파일을 엽니 다. 파일이 이미 존재하는 경우, 파일 포인터는 파일의 끝에 배치됩니다. 즉, 새로운 콘텐츠 후 기존의 컨텐츠로 기록된다. 파일이 존재하지 않는 경우, 쓰기에 대한 새 파일을 만듭니다.
AB 바이너리 형식으로 APPEND를위한 파일을 엽니 다. 파일이 이미 존재하는 경우, 파일 포인터는 파일의 끝에 배치됩니다. 즉, 새로운 콘텐츠 후 기존의 컨텐츠로 기록된다. 파일이 존재하지 않는 경우, 쓰기에 대한 새 파일을 만듭니다.
A + 읽기와 쓰기를위한 파일을 엽니 다. 파일이 이미 존재하는 경우, 파일 포인터는 파일의 끝에 배치됩니다. 이 파일이 열릴 모드를 추가한다. 파일이 존재하지 않는 경우, 읽기와 쓰기에 대한 새 파일을 만듭니다.
AB + 바이너리 형식으로 APPEND를위한 파일을 엽니 다. 파일이 이미 존재하는 경우, 파일 포인터는 파일의 끝에 배치됩니다. 파일이 존재하지 않는 경우, 읽기와 쓰기에 대한 새 파일을 만듭니다.

다음 예는 문자열에서 파일 foo.txt의에 기록 될 것입니다 :

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "w")

f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )

# 关闭打开的文件
f.close()
  • 첫 번째 매개 변수는 열려는 파일의 이름입니다.
  • 문자 두 번째 매개 변수 파일을 사용하는 방법에 대해 설명합니다. 모드는 할 수있다 'R' '는'추가 파일 내용에 대해 (파일이 삭제됩니다있는 경우), 파일은 쓰기 위해, 'w'읽기 전용 인 경우, 기록 된 모든 데이터가 자동으로 끝에 추가됩니다 . 읽기와 쓰기 모두를위한 'R +'. mode 인수는 선택 사항이며, 'R'는 기본 값이됩니다.

, 파일 foo.txt의를 열어 다음과 같이 나타납니다 :

$ cat /tmp/foo.txt 
Python 是一个非常好的语言。
是的,的确非常好!!

파일 오브젝트의 메소드

이 예는 나머지 부분은 F의라는 파일 개체를 만든 것으로 가정합니다.

f.read ()

파일의 내용을 읽을 수있는 데이터의 특정 번호를 읽하는 f.read (크기)를 호출하고 스트링 또는 바이트 개체로 반환.

크기는 선택적 숫자 매개 변수입니다. 크기가 무시되거나 부정되면 파일의 전체 내용을 읽고이를 반환 할 것이다.

다음은 파일 foo.txt의가 (위의 예에서 생성 된) 있다고 가정합니다 :

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.read()
print(str)

# 关闭打开的文件
f.close()

위의 프로그램은 출력은 다음과 같습니다

Python 是一个非常好的语言。
是的,的确非常好!!

f.readline ()

f.readline는 () 당신은 파일에서 한 줄을 읽어보십시오. 줄 바꿈 문자 '\ n'을. ,이 마지막 행에 읽은했다고 설명하면 f.readline ()는 빈 문자열을 반환합니다.

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readline()
print(str)

# 关闭打开的文件
f.close()

위의 프로그램은 출력은 다음과 같습니다

Python 是一个非常好的语言。

f.readlines ()

f.readlines ()는 파일에 포함 된 모든 행을 반환합니다.

선택적 매개 변수가 힌트 (sizehint) 경우 길이를 지정 바이트, 선으로 구분이 바이트를 읽어보십시오.

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readlines()
print(str)

# 关闭打开的文件
f.close()

위의 프로그램은 출력은 다음과 같습니다

['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']

또 다른 방법은 파일 객체를 반복하는 것입니다하고 각 줄을 읽습니다 :

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

for line in f:
    print(line, end='')

# 关闭打开的文件
f.close()

위의 프로그램은 출력은 다음과 같습니다

Python 是一个非常好的语言。
是的,的确非常好!!

이 방법은 매우 간단하지만, 양호한 제어를 제공하지 않는다. 모두 다르기 때문에 처리 메커니즘, 그것은 혼합하지 않는 것이 좋습니다.

f.write ()

f.write (문자열) 파일에 기록 문자열, 그리고 기록 된 문자 수를 반환합니다.

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "w")

num = f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )
print(num)
# 关闭打开的文件
f.close()

위의 프로그램은 출력은 다음과 같습니다

29

당신이 문자열이 아닌 것들의 일부를 작성하려면 변환해야합니다 :

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo1.txt", "w")

value = ('www.w3big.com', 14)
s = str(value)
f.write(s)

# 关闭打开的文件
f.close()

위의 프로그램, 오픈 foo1.txt 파일 :

$ cat /tmp/foo1.txt 
('www.w3big.com', 14)

f.tell ()

f.tell는 ()는 파일 계산의 시작부터 바이트의 수, 파일 객체의 위치가 현재 위치를 반환합니다.

f.seek ()

이 파일의 현재 위치를 변경하려면 f.seek 사용할 수있는 기능 (from_what, 오프셋 (offset)).

From_what 값, 그것은 (1)의 단부는 예를 들어 현재 위치, 파일 2를 나타내고있는 경우 0의 시작을 나타내는 경우 :

  • (X, 0) 시크 : 시작 위치로부터, 그 파일의 선두 문자의 첫 줄 것은 X자를 이동하기 시작
  • 시크 (X, 1) : 현재 위치에서 후진 이동 X자를 나타내고
  • 파일의 전단에서 휴대 X 문자를 보여줍니다 (-x, 2) 추구

from_what 디폴트 값, 즉, 파일의 시작 부분에 0이다. 여기에 완벽한 예입니다 :

>>> f = open('/tmp/foo.txt', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)     # 移动到文件的第六个字节
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # 移动到文件的倒数第三字节
13
>>> f.read(1)
b'd'

f.close ()

텍스트 파일만을 찾을 파일의 시작과 관련하여 (그 파일이 오픈 모드 ㄴ 생략).

당신이 파일을 완료하면 파일을 호출하려고하면, 시스템 리소스 파일을 닫고 해제 f.close ()를 호출, 예외가 발생합니다.

>>> f.close()
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: I/O operation on closed file
<pre>
<p>
当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮你正确的关闭文件。 而且写起来也比 try - finally 语句块要简短:</p>
<pre>
>>> with open('/tmp/foo.txt', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

File 객체는 isatty ()와 trucate ()과 같은 다른 방법이있다, 그러나 이들은 보통 이하이다.


피클 모듈

파이썬 피클 모듈은 기본 데이터 시퀀스 및 역 직렬화를 구현합니다.

우리는 영구 저장 장치에 파일에 정보를 실행하는 직렬화 작업 피클 모듈 대상 프로그램을 저장 할 수 있었다.

역 직렬화 피클 모듈에 의해, 우리는 파일에서 개체를 저장하는 프로그램을 만들 수 있습니다.

기본 인터페이스 :

pickle.dump(obj, file, [,protocol])

이 개체 피클로, 읽기의 파일을 열 수있게합니다 :

x = pickle.load(file)

참고 : 파일에서 문자열, 원래 파이썬 객체의 재건을 읽어보십시오.

파일 : 읽기와 파일 - 류의 객체 ()과의 readline () 인터페이스를 제공합니다.

실시 예 1 :

#!/usr/bin/python3
import pickle

# 使用pickle模块将数据对象保存到文件
data1 = {'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None}

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)

output = open('data.pkl', 'wb')

# Pickle dictionary using protocol 0.
pickle.dump(data1, output)

# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)

output.close()

실시 예 2 :

#!/usr/bin/python3
import pprint, pickle

#使用pickle模块从文件中重构python对象
pkl_file = open('data.pkl', 'rb')

data1 = pickle.load(pkl_file)
pprint.pprint(data1)

data2 = pickle.load(pkl_file)
pprint.pprint(data2)

pkl_file.close()