超常用的Python代码片段 | 备忘单

作者 | BisratYalew

原文 | GitHub

公号 “Python大本营” 

 

超常用的Python代码片段

 

本文作者BisratYalew共享了自己在项目中使用过的Python代码片段,希望能帮到其他开发人员,以减少时间并简化开发流程,该项目内容包含:String、Number、File、Functions、Classes、Date and Time、Regular Expressions、Web Data Handling、Asyncio以及Socket。

Python Strings

  • strip

  • lstrip

  • rstrip

  • upper

  • isupper

  • lower

  • islower

  • in

  • not in

  • ord

  • Template Strings

  • Pyperclip module

strip()

 

>>> check =      Python is great!        # removes characters from both left and right based on the argument
>>> check.strip()
Python is great

lstrip()

 

>>> check.lstrip()
 Python is great!       ## removes characters from left based on the argument

rstrip()

 

>>> check.rstrip() ## removes characters from left based on the argument
      Python is great! 

ord()

 

>>> ord( A ), ord( Z )
(65, 90)
>>> ord( 0 ), ord( 9 )
(48, 57)
>>> ord( a ), ord( z )
(97, 122)
>>> ord( B ), ord( Y )
(66, 89)

The in and not in Operators with string

 

>>>  Python  in  Python is great! 
True
>>>  python  in  Python
False
>>>  PYTHON  in  Python is great! 
False
>>>   in  python
True
>>>  Python  not in  python and javascript  ## Matches case
True

The in and not in Operators with list

 

>>> a = [ P ,  y ,  t ,  h ,  o ,  n ]
>>>  p  in a
False
>>>  P  in a
True
>>>  o  in a
True

## On Integers List
>>> a = [1, 2, 3, 5]
>>> 5 in a
True
>>> 4 in a
False
>>> 1 in a
True

The upper(), lower(), isupper(), islower() string methods

 

>>> check =  Hello world! 
>>> check = check.lower() ## converts check to lower
>>> check
 hello world! 
>>> check = check.isupper() ## checks whether check variable is upper or not. 
False
>>> check = check.islower() ## checks whether check variable is upper or not. 
True
>>> check = check.upper() ## converts check to upper
>>> check
 HELLO WORLD! 
>>> check = check.isupper() ## checks whether check variable is upper or not. 
True
>>> check = check.islower() ## checks whether check variable is upper or not. 
False

Template Strings

模板字符串是一种更简单的机制,用于处理用户生成的格式字符串

 

>>> from string import Template
>>> language =  Python
>>> t = Template( $name is great! )
>>> t.substitute(name=language) ## Substitutes name with language variable
 Python is great! 
#####Pyperclip
Pyperclip是一个Python库,可以帮助我们轻松复制和粘贴字符串
首先使用pip安装

pip install pyperclip

 

```
>>> import pyperclip
>>> pyperclip.copy( Hello World ) ## Copy Hello World
>>> pyperclip.paste()
Hello World

Number

Python中有三种数字类型

  • int (e.g. 2, 4, 20)
    bool (e.g. False and True, acting like 0 and 1)

  • float (e.g. 5.0, 1.6)

  • complex (e.g. 5+6j, 4-3j)

Basic Functions

 

a = pow(2, 3) ## Or: 2 ** 3
b = abs(5) ## <real> = abs(<num>)

Constants

 

from math import e, pi

Trigonometry

 

from math import cos, acos, sin, asin, tan, atan, degrees, radians

Logarithm

 

from math import log, log10, log2
<float> = log(<real> [, base])  # Base e, if not specified.

Infinity, nan

 

from math import inf, nan, isinf, isnan

Or:

 

float( inf ), float( nan )

Statistics

 

from statistics import mean, median, variance, pvariance, pstdev

Random

 

from random import random, randint, choice, shuffle
<float> = random()
<int>   = randint(from_inclusive, to_inclusive)
<el>    = choice(<list>)
shuffle(<list>)

Combinatorics

每个函数都返回一个迭代器。
如果要打印迭代器,需要将其传递给list()函数!

 

from itertools import product, combinations, combinations_with_replacement, permutations

 

>>> product([0, 1], repeat=3)
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), 
 (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

>>> product( ab ,  12 )
[( a ,  1 ), ( a ,  2 ),
 ( b ,  1 ), ( b ,  2 )]

>>> combinations( abc , 2)
[( a ,  b ), ( a ,  c ), ( b ,  c )]

>>> combinations_with_replacement( abc , 2)
[( a ,  a ), ( a ,  b ), ( a ,  c ), 
 ( b ,  b ), ( b ,  c ), 
 ( c ,  c )]

>>> permutations( abc , 2)
[( a ,  b ), ( a ,  c ), 
 ( b ,  a ), ( b ,  c ), 
 ( c ,  a ), ( c ,  b )]

 

 

"""
def test_integer_numbers():
    """Integer type
    Int, or integer, is a whole number, positive or negative,
    without decimals, of unlimited length.
    """

    positive_integer = 1
    negative_integer = -3255522
    big_integer = 35656222554887711

    assert isinstance(positive_integer, int)
    assert isinstance(negative_integer, int)
    assert isinstance(big_integer, int)


def test_booleans():
    """Boolean
    Booleans represent the truth values False and True. The two objects representing the values
    False and True are the only Boolean objects. The Boolean type is a subtype of the integer type,
    and Boolean values behave like the values 0 and 1, respectively, in almost all contexts, the
    exception being that when converted to a string, the strings "False" or "True" are returned,
    respectively.
    """

    true_boolean = True
    false_boolean = False

    assert true_boolean
    assert not false_boolean

    assert isinstance(true_boolean, bool)
    assert isinstance(false_boolean, bool)

    # Let s try to cast boolean to string.
    assert str(true_boolean) == "True"
    assert str(false_boolean) == "False"


def test_float_numbers():
    """Float type
    Float, or "floating point number" is a number, positive or negative,
    containing one or more decimals.
    """

    float_number = 7.0
    # Another way of declaring float is using float() function.
    float_number_via_function = float(7)
    float_negative = -35.59

    assert float_number == float_number_via_function
    assert isinstance(float_number, float)
    assert isinstance(float_number_via_function, float)
    assert isinstance(float_negative, float)

    # Float can also be scientific numbers with an "e" to indicate
    # the power of 10.
    float_with_small_e = 35e3
    float_with_big_e = 12E4

    assert float_with_small_e == 35000
    assert float_with_big_e == 120000
    assert isinstance(12E4, float)
    assert isinstance(-87.7e100, float)


def test_complex_numbers():
    """Complex Type"""

    complex_number_1 = 5 + 6j
    complex_number_2 = 3 - 2j

    assert isinstance(complex_number_1, complex)
    assert isinstance(complex_number_2, complex)
    assert complex_number_1 * complex_number_2 == 27 + 8j


def test_number_operators():
    """Basic operations"""

    # Addition.
    assert 2 + 4 == 6

    # Multiplication.
    assert 2 * 4 == 8

    # Division always returns a floating point number.
    assert 12 / 3 == 4.0
    assert 12 / 5 == 2.4
    assert 17 / 3 == 5.666666666666667

    # Modulo operator returns the remainder of the division.
    assert 12 % 3 == 0
    assert 13 % 3 == 1

    # Floor division discards the fractional part.
    assert 17 // 3 == 5

    # Raising the number to specific power.
    assert 5 ** 2 == 25  # 5 squared
    assert 2 ** 7 == 128  # 2 to the power of 7

    # There is full support for floating point; operators with
    # mixed type operands convert the integer operand to floating point.
    assert 4 * 3.75 - 1 == 14.0

 

File

  • Read File

  • Write a File

  • Copy File

  • Move File

  • Readline

Read a file

在Python 3中,如果文件未以二进制模式打开,则编码将由locale.getpreferredencoding(False)或用户输入确定。

 

>>> with open("/etc/hosts", encoding="utf-8") as f:
...     content = f.read()
...
>>> print(type(content))
<class  str >

In python3 binary mode

 

>>> with open("/etc/hosts", "rb") as f:
...     content = f.read()
...
>>> print(type(content))
<class  bytes >

In python2

 

## The content of the file is a byte string, not a Unicode string.
>>> with open("/etc/passwd") as f:
...    content = f.read()
>>> print(type(content))
<type  str >
>>> print(type(content.decode("utf-8")))
<type  unicode >

Write a File

 

>>> file_content = "Python is great!"
>>> with open("check.txt", "w") as file:
...     file.write(file_content)

Copy a file

 

>>> from distutils.file_util import copy_file
>>> copy_file("a", "b")
( b , 1)

Move a File

 

>>> from distutils.file_util import move_file
>>> move_file("./a", "./b")
./b

Readline

 

## If you are not using linux machine try to change the file path to read
>>> with open("/etc/hosts") as f:
...     for line in f:
...         print(line, end= )
...
127.0.0.1       localhost
255.255.255.255     broadcasthost
::1             localhost

 

Python Functions

 

  • Lambda

  • Declare Function

  • Document Function

  • Get Function Name

  • Arguments

  • Decorator

  • Generator

Lambda

 

>>> fn = lambda x: x**3
>>> fn(2)
8

>>> (lambda x: x**3)(2)
8

>>> (lambda x: [x * _ for _ in range(10)])(3)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

Declare Function

 

def fn_name(): ## Where fn_name represents the function name
    ........
    ........

Get Function Name

 

## First Declare a function 
def fn_name():
    .......
    .......

>>> fn_name.__name__
fn_name

Document a Function

 

## Document a function with three single quotes
def check():
     This function is documented
    return

>>> check.__doc__
This function is documented

Arguments

 

>>> def multiply(a, b=0): ## b is 0 by default
...     return a * b
...
>>> multiply(1, 3) ## 3 * 1
3
>>> multiply(5) ## 5 * 0
0
>>> multiply(5, b=3) ## 5 * 3
15

Generator

 

def count(start, step):
    while True:
        yield start
        start += step

>>> counter = count(10, 5)
>>> next(counter)
(15)

>>> next(counter) ## Increments by 5 from the previous result
(20)

>>> next(counter)
(25)

>>> next(counter), next(counter), next(counter)
(30, 35, 40)

Decorator

 

>>> from functools import wraps

>>> def decorator_func(func):
...     @wraps(func)
...     def wrapper(*args, **kwargs):
...         print("Before calling {}.".format(func.__name__))
...         ret = func(*args, **kwargs)
...         print("After calling {}.".format(func.__name__))
...         return ret
...     return wrapper
...
>>> @decorator_func
... def check():
...     print("Inside check function.")
...
>>> check()
Before calling check.
Inside check function.
After calling check.

 

Classes

 

  • Definition

  • Class Objects

  • Instance Objects

  • Method Objects

  • Inheritance

  • Multiple Inheritance

 

Class Definition

 

Python是一种面向对象的编程语言。 Python中的几乎所有东西都是一个对象,具有其属性和方法。 Class类似于对象构造函数,或者是用于创建对象的“蓝图”。

 

def test_class():
    """Class definition."""

    # Class definitions, like function definitions (def statements) must be executed before they
    # have any effect. (You could conceivably place a class definition in a branch of an if
    # statement, or inside a function.)

    class GreetingClass:
        """Example of the class definition
        This class contains two public methods and doesn t contain constructor.
        """
        name =  Bisrat

        def say_hello(self):
            """Class method."""
            # The self parameter is a reference to the class itself, and is used to access variables
            # that belongs to the class. It does not have to be named self , you can call it
            # whatever you like, but it has to be the first parameter of any function in the class.
            return  Hello   + self.name

        def say_goodbye(self):
            """Class method."""
            return  Goodbye   + self.name

    # When a class definition is entered, a new namespace is created, and used as the local scope —
    # thus, all assignments to local variables go into this new namespace. In particular, function
    # definitions bind the name of the new function here.

    # Class instantiation uses function notation. Just pretend that the class object is a
    # parameterless function that returns a new instance of the class. For example the following
    # code will creates a new instance of the class and assigns this object to the local variable.
    greeter = GreetingClass()

    assert greeter.say_hello() ==  Hello Bisrat
    assert greeter.say_goodbye() ==  Goodbye Bisrat

>>> print(type(content))
<class  str >

 

Class Objects

 

 

def test_class_objects():
    """Class Objects.
    Class objects support two kinds of operations:
    - attribute references
    - instantiation.
    """

    # ATTRIBUTE REFERENCES use the standard syntax used for all attribute references in
    # Python: obj.name. Valid attribute names are all the names that were in the class’s namespace
    # when the class object was created. For class MyCounter the following references are valid
    # attribute references:

    class ComplexNumber:
        """Example of the complex numbers class"""

        real = 0
        imaginary = 0

        def get_real(self):
            """Return real part of complex number."""
            return self.real

        def get_imaginary(self):
            """Return imaginary part of complex number."""
            return self.imaginary

    assert ComplexNumber.real == 0

    # __doc__ is also a valid attribute, returning the docstring belonging to the class
    assert ComplexNumber.__doc__ ==  Example of the complex numbers class

    # Class attributes can also be assigned to, so you can change the value of
    # ComplexNumber.counter by assignment.
    ComplexNumber.real = 10
    assert ComplexNumber.real == 10

    # CLASS INSTANTIATION uses function notation. Just pretend that the class object is a
    # parameterless function that returns a new instance of the class. For example
    # (assuming the above class):
    complex_number = ComplexNumber()

    assert complex_number.real == 10
    assert complex_number.get_real() == 10

    # Let s change counter default value back.
    ComplexNumber.real = 10
    assert ComplexNumber.real == 10

    # The instantiation operation (“calling” a class object) creates an empty object. Many classes
    # like to create objects with instances customized to a specific initial state. Therefore a
    # class may define a special method named __init__(), like this:

    class ComplexNumberWithConstructor:
        """Example of the class with constructor"""
        def __init__(self, real_part, imaginary_part):
            self.real = real_part
            self.imaginary = imaginary_part

        def get_real(self):
            """Return real part of complex number."""
            return self.real

        def get_imaginary(self):
            """Return imaginary part of complex number."""
            return self.imaginary

    complex_number = ComplexNumberWithConstructor(3.0, -4.5)
    assert complex_number.real, complex_number.imaginary == (3.0, -4.5)

 

Instance Object

 

 

def test_instance_objects():
    # DATA ATTRIBUTES need not be declared; like local variables, they spring into existence when
    # they are first assigned to. For example, if x is the instance of MyCounter created above,
    # the following piece of code will print the value 16, without leaving a trace.

    # pylint: disable=too-few-public-methods
    class DummyClass:
        pass

    dummy_instance = DummyClass()

    # pylint: disable=attribute-defined-outside-init
    dummy_instance.temporary_attribute = 1
    assert dummy_instance.temporary_attribute == 1
    del dummy_instance.temporary_attribute

 

Method Objects

 

 

class MyCounter:
    """A simple example of the counter class"""
    counter = 10

    def get_counter(self):
        """Return the counter"""
        return self.counter

    def increment_counter(self):
        """Increment the counter"""
        self.counter += 1
        return self.counter


def test_method_objects():
    """Method Objects."""


    # object types can have methods as well. For example, list objects have methods called append,

    counter = MyCounter()
    assert counter.get_counter() == 10

    get_counter = counter.get_counter
    assert get_counter() == 10



    assert counter.get_counter() == 10
    assert MyCounter.get_counter(counter) == 10

 

Inheritance

 

 

# pylint: disable=too-few-public-methods
class Person:
    """Example of the base class"""
    def __init__(self, name):
        self.name = name

    def get_name(self):
        """Get person name"""
        return self.name


# The syntax for a derived class definition looks like this.
class Employee(Person):

    def __init__(self, name, staff_id):
        Person.__init__(self, name)
        # You may also use super() here in order to avoid explicit using of parent class name:
        # >>> super().__init__(name)
        self.staff_id = staff_id

    def get_full_id(self):
        """Get full employee id"""
        return self.get_name() +  ,   + self.staff_id


def test_inheritance():
    """Inheritance."""

    # There’s nothing special about instantiation of derived classes: DerivedClassName() creates a
    # new instance of the class. Method references are resolved as follows: the corresponding class
    # attribute is searched, descending down the chain of base classes if necessary, and the method
    # reference is valid if this yields a function object.
    person = Person( Bisrat )
    employee = Employee( John ,  A23 )

    assert person.get_name() ==  Bisrat
    assert employee.get_name() ==  John
    assert employee.get_full_id() ==  John, A23

    # Python has two built-in functions that work with inheritance:
    #
    # - Use isinstance() to check an instance’s type: isinstance(obj, int) will be True only if
    # obj.__class__ is int or some class derived from int.
    #
    # - Use issubclass() to check class inheritance: issubclass(bool, int) is True since bool is
    # a subclass of int. However, issubclass(float, int) is False since float is not a subclass
    # of int.

    assert isinstance(employee, Employee)
    assert not isinstance(person, Employee)

    assert isinstance(person, Person)
    assert isinstance(employee, Person)

    assert issubclass(Employee, Person)
    assert not issubclass(Person, Employee)

 

Multiple Inheritance

 

def test_multiple_inheritance():
    """Multiple Inheritance"""
    class Clock:
        """Clock class"""

        time =  10:17 PM 

        def get_time(self):
            """Get current time
            Method is hardcoded just for multiple inheritance illustration.
            """
            return self.time


    class Calendar:
        """Calendar class"""

        date =  12/08/2018

        def get_date(self):
            """Get current date
            Method is hardcoded just for multiple inheritance illustration.
            """
            return self.date

    # Python supports a form of multiple inheritance as well. A class definition with multiple
    # base classes looks like this.
    class CalendarClock(Clock, Calendar):

    calendar_clock = CalendarClock()

    assert calendar_clock.get_date() ==  12/08/2018
    assert calendar_clock.get_time() ==  11:23 PM 

 

Date and Time

 

  • DateTime

  • Time Delta

  • Calendar

datetime

 

from datetime import date 
from datetime import time
from datetime import datetime

>>> today = date.today()
>>> print(today)
2019-03-04

>>> print(today.day, today.month, today.year)
(4, 3, 2019)

>>> print(today.weekday()) ## returns an integers in the range 0 to 6, where 0 represents Monday and 6 represents Sunday.
0

>>> today = datetime.now()
>>> print(today)
2019-03-04 21:55:56.228000

>>> time = datetime.time(datetime.now())
>>> print(time) 
21:56:16.040000

Time Delta

This module is used to perform date and time calculations.

 

from datetime import date 
from datetime import time
from datetime import datetime
from datetime import timedelta

print(timedelta(days=365, hours=5, minutes=1)) # 365 days, 5:01:00
today  = datetime.now()
print(today + timedelta(days=60)) # 2019-03-29 18:41:46.720811
print(today - timedelta(days=57)) # 2018-12-02 18:42:36.774421

timedelta对象采用以下参数:天,秒,微秒,毫秒,分钟,小时,周。 要查找过去或将来的日期,只需使用带有当前日期所需差异的加号或减号。

Calendar

日历相关操作并以格式化方式显示

import calendar

c = calendar.TextCalendar(calendar.MONDAY)
st = c.formatmonth(2017, 1, 0,0)
print(st)

hc = calendar.HTMLCalendar(calendar.MONDAY)
st = hc.formatmonth(2017, 1)
print(st)

#Output
   
    January 2017
Mo Tu We Th Fr Sa Su
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

<table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">January 2017</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sun">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td><td class="sun">8</td></tr>
<tr><td class="mon">9</td><td class="tue">10</td><td class="wed">11</td><td class="thu">12</td><td class="fri">13</td><td class="sat">14</td><td class="sun">15</td></tr>
<tr><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu">19</td><td class="fri">20</td><td class="sat">21</td><td class="sun">22</td></tr>
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td><td class="sun">29</td></tr>
<tr><td class="mon">30</td><td class="tue">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
   

.HTMLCalendar以表格的形式返回HTML代码。Calendar.SUNDAY表示格式化日历中的第一天是星期日,在上边的例子中,使用了Calendar.MONDAY。因此,我们可以在输出中看到表示中的第一天是星期一。

Iterating through dates of a month

import calendar

c = calendar.TextCalendar(calendar.MONDAY)
for i in c.itermonthdays(2017, 8):
    print(i, end =    )
print(  )
for name in calendar.month_name:
    print(name, end =    )
print(  )
for day in calendar.day_name:
    print(day, end =    )
   
Output:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0
 January February March April May June July August September October November December
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
   

 

Regular Expressions

 

非特殊字符匹配

 

 

Regular Expression Examples

 

Web Data Handling

 

  • Make a Request

  • Read

  • Get Code

  • HTML Parsing

  • JSON Parsing

  • XML Parsing

Make a Request

 

import urllib.request ## urllib module is used to send request and receive response from a server. It can used to get html / JSON / XML data from an api.

webData = request.urlopen("http://www.google.com") ## It opens a connection to google.com and returns an object of class http.client.HTTPResponse

Read
.read()返回网页的HTML数据。

Get Code
.getcode() 返回连接建立的状态代码。

HTML Parsing

 

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def error(self, message):
        pass

parser = MyHTMLParser()
f = open("check.html")
if f.mode ==  r :  # file successfully opened
    contents = f.read()
    parser.feed(contents)

JSON Parsing

 

import json
json_data = json.loads(response)

XML Parsing

 

import xml.dom.minidom
doc = minidom.parse("check.xml")

 

Asyncio

 

  • Definition

  • asyncio.run

  • Socket with Asyncio

  • Move File

  • Readline

 

asyncio是Python 3.5中包含的一个库,采用非常非常明确的异步编程方法:只有标记为async的方法编写的代码才能以异步方式调用任何代码。

asyncio.run

Python 3.7中的新功能

 

>>> import asyncio
>>> from concurrent.futures import ThreadPoolExecutor

>>> e = ThreadPoolExecutor()
>>> async def read_file(file_):
...     loop = asyncio.get_event_loop()
...     with open(file_) as f:
...         return (await loop.run_in_executor(e, f.read))
...
>>> ret = asyncio.run(read_file( /etc/passwd ))

Socket with Asyncio

 

import asyncio
import socket

host =  localhost
port = 9527
loop = asyncio.get_event_loop()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setblocking(False)
s.bind((host, port))
s.listen(10)

async def handler(conn):
    while True:
        msg = await loop.sock_recv(conn, 1024)
        if not msg:
            break
        await loop.sock_sendall(conn, msg)
    conn.close()

async def server():
    while True:
        conn, addr = await loop.sock_accept(s)
        loop.create_task(handler(conn))

loop.create_task(server())
loop.run_forever()
loop.close()

 

 

output: (bash 1)

$ nc localhost 9527
Hello
Hello

 

 

output: (bash 2)

$ nc localhost 9527
World
World

 

Socket

 

获取主机名

文件传输协议(ftp)客户端

文件传输协议(ftp)服务器

Get Hostname

 

>>> import socket
>>> socket.gethostname()
root@bisratyalew

>>> hostname = socket.gethostname()

>>> socket.gethostbyname( localhost )
127.0.0.1

>>> socket.gethostbyname(hostname) ### Returns ip address
192.168.1.3

FTP Client

 

import socket                   # Import socket module

port = 60000                    # Reserve a port for your service.
s = socket.socket()             # Create a socket object
host = socket.gethostname()     # Get local machine name
s.bind((host, port))            # Bind to the port
s.listen(5)                     # Now wait for client connection.

print( Server listening.... )

while True:
    conn, addr = s.accept()     # Establish connection with client.
    print( Got connection from , addr)
    data = conn.recv(1024)
    print( Server received , repr(data))

    filename =  mytext.txt
    with open(filename,  rb ) as f:
        in_data = f.read(1024)
        while in_data:
            conn.send(in_data)
            print( Sent  , repr(in_data))
            in_data = f.read(1024)

    print( Done sending )
    conn.send( Thank you for connecting )
    conn.close()


# client side server

import socket                   # Import socket module

s = socket.socket()             # Create a socket object
host = socket.gethostname()     # Get local machine name
port = 60000                    # Reserve a port for your service.

s.connect((host, port))
s.send("Hello server!")

with open( received_file ,  wb ) as f:
    print( file opened )
    while True:
        print( receiving data... )
        data = s.recv(1024)
        print( data=%s , (data))
        if not data:
            break
        # write data to a file
        f.write(data)

f.close()
print( Successfully get the file )
s.close()
print( connection closed )

FTP Server

 

"""
    File transfer protocol used to send and receive files using FTP server.
    Use credentials to provide access to the FTP client 
"""

from ftplib import FTP
ftp = FTP( xxx.xxx.x.x )  # Enter the ip address or the domain name here
ftp.login(user= username , passwd= password )
ftp.cwd( /Enter the directory here/ )

"""
    The file which will be received via the FTP server
    Enter the location of the file where the file is received
"""

def recieve_file():
    file_name =  example.txt    """ Enter the location of the file """
    with open(file_name,  wb ) as LocalFile:
        ftp.retrbinary( RETR   + file_name, LocalFile.write, 1024)
    ftp.quit()

"""
    The file which will be sent via the FTP server
    The file send will be send to the current working directory
"""

def send_file():
    file_name =  example.txt    """ Enter the name of the file """
    with open(file_name,  rb ) as LocalFile:
        ftp.storbinary( STOR   + file_name, LocalFile)
    ftp.quit()

 

 

 

项目地址:

https://github.com/BisratYalew/python-cheatsheet

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值