文件加密---使用换位加密和解密方法加密文件

python可以从硬盘直接打开和读取文件   

  读取文件

  读进变量

  关闭文件

注意程序中的注释,是关于python的学习笔记。尽管看起来有点乱。。。

结合transpositionEncrypy and decrypy(https://www.cnblogs.com/PiaYie/p/13469532.html的两个程序

# Transposition Cipher Encrypt/Decrypt File
# http://inventwithpython.com/hacking (BSD Licensed)

# time模块和time.time()函数
# 返回一个浮点数,是1970年1月1日起到现在的秒数 called "Unix Epoch"
# 我们可以用两次调用time.time()的返回值来判断程序的运行时间  密码学是重视时间的

import time, os, sys, transpositionEncrypt, transpositionDecrypt

def main():
    #inputFilename = 'D:\PiaYie\jczhang\密码学\py密码学编程教学代码\frankenstein.txt'
    inputFilename = 'frankenstein.txt'
    # BE CAREFUL! If a file with the outputFilename name already exists,
    # this program will overwrite that file.
    outputFilename = 'frankenstein.encrypted.txt'
    myKey = 10
    myMode = 'encrypt' # set to 'encrypt' or 'decrypt'

    # If the input file does not exist, then the program terminates early.
    if not os.path.exists(inputFilename):
        print('The file %s does not exist. Quitting...' % (inputFilename))
        sys.exit()

    # If the output file already exists, give the user a chance to quit.
    # 打开文件要当心 以'w'打开时,这个文件若已经存在会被删除再新建,即有一个内容清空的过程
    # 但是我们有对策,os.path.exists(filename) 返回True or False,来检查某个文件名是否存在,可加上路径检查
    if os.path.exists(outputFilename):
        print('This will overwrite the file %s. (C)ontinue or (Q)uit?' % (outputFilename))
        response = input('> ')
        # startswith()和endswit()返回True or False,字面意思
        # 'hello'.startswith('h') ---> True 'hello'.startswith('he') --->  True
        if not response.lower().startswith('c'):
            sys.exit()

    # Read in the message from the input file
    # open()函数    第一个参数是文件的名字,同路径写名字即可,或者是绝对路径
    # 路径  windows:D:\PiaYie\jczhang\密码学\py密码学编程教学代码\frankenstein.txt 
    #       linux:  /usr/piayie/frankenstein.txt
    # open()函数返回一个“文件对象” 数据类型 的值   用这个值标记一个文件,用于读取写入和关闭
    # 第二个参数可选   默认'r'即读取打开    'w'---写入打开,    'a'---追加打开
    

    # read()方法返回一个字符串包含文件里的所有内容,如果文件是多行的,则read()返回的这个字符串
    # 每一行里都有一个
换行字符

    # close()方法 这个文件使用完毕就该关闭释放资源了  当然,py程序终止时候会自动释放所有未释放的资源 
    # 若希望重新读取文件,也要先行close() 再调用open()

    fileObj = open(inputFilename)
    content = fileObj.read()
    fileObj.close()


    #字符串的title()方法
    #lower()转化为小写   upper()转化为大写  title()字符串中的每个单词的首字母大写,其他字母小写
    print('%sing...' % (myMode.title()))

    # Measure how long the encryption/decryption takes.

    startTime = time.time()
    if myMode == 'encrypt':
        translated = transpositionEncrypt.encryptMessage(myKey, content)
    elif myMode == 'decrypt':
        translated = transpositionDecrypt.decryptMessage(myKey, content)
    totalTime = round(time.time() - startTime, 2)
    print('%sion time: %s seconds' % (myMode.title(), totalTime))


    # open()函数返回的文件对象 有 write()方法。前提是以'w'或者'a'模式open()的文件对象
    # fo = open('filename.txt', 'w')    or    fo = open('filename.txt', 'a')
    # write()方法的参数是一个字符串,把这个字符串以相应的方法写入该文件
    # Write out the translated message to the output file.
    outputFileObj = open(outputFilename, 'w')
    outputFileObj.write(translated)
    outputFileObj.close()

    print('Done %sing %s (%s characters).' % (myMode, inputFilename, len(content)))
    print('%sed file is %s.' % (myMode.title(), outputFilename))


# If transpositionCipherFile.py is run (instead of imported as a module)
# call the main() function.
if __name__ == '__main__':
    main()

P.S.

#size参数可选,相应的大小,如果不给那么就读取整个文件内容  size不能过大,小于机器内存的两倍
f.read([size])
#按行读取文件内容,字符串结尾会自动加上一个换行符( 
 ),除非最后一行没有以换行符结尾
f.readline()

  如果如果 f.readline() 返回一个空字符串,那就表示到达了文件末尾,如果是一个空行,就会描述为 ' '

#返回一个列表,其中包含了文件中所有的数据行。如果给定了 sizehint 参数,就会读入多于一行的比特数,从中返回多行文本。
f.readlines() 

  通常用于高效读取大型行文件,避免了将整个文件读入内存。这种操作只返回完整的行。

通过遍历  文件对象de行 来读取文件 每一行-------内存高效、快速,并且代码简洁
>>> for line in fileobj:
...     print(line, end='')
...
This is the first line of the file.
Second line of the file
#推荐的文件打开方式
with open("myfile.txt") as f:
    for line in f:
        print line
文件写入
#将 string 的内容写入文件,并返回写入字符的长度,不是字符串用str()转化成string
f.write(string) 方法


>>> value = ('the answer', 42)
>>> s = str(value)
>>> f.write(s)
18
关闭文件释放资源
>>> f.close()
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: I/O operation on closed file
用关键字 with 处理文件对象
#优点,自动关闭文件释放资源

>>> with open('/tmp/workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True
原文地址:https://www.cnblogs.com/PiaYie/p/13470586.html