天天看點

Python讀寫文本文檔詳解

以下3步問正确的程式片段:

#! /usr/bin/python3

‘makeTextFile.py -- create text file‘

import os

def write_file():

    "used to write a text file."

    ls = os.linesep

    #get filename

    fname = input("Please input filename:")

    while True:

        if os.path.exists(fname):

            print("Error: ‘%s‘ already exists" % fname)

            fname = input("Please input filename:")

        else:

            break

    #get file conent linesOnScreen

    all = []

    print("\nEnter lines (‘.‘ to quit).\n")

        entry = input(‘>‘)

        if entry == ‘.‘:

            all.append(entry)

    try:

        fobj = open(fname,  ‘w‘)

    except IOError as err:

        print(‘file open error: {0}‘.format(err))  

    fobj.writelines([‘%s%s‘ % (x,  ls) for x in all])

    fobj.close()

    print(‘WRITE FILE DONE!‘)

    return fname

‘readTextFile.py -- read and display text file.‘

def read_file(filename):

    ‘used to read a text file.‘

        fobj = open(filename,  ‘r‘)

    else:

        for eachLine in fobj:

            print(eachLine)

        fobj.close()

‘write_and_read_file.py -- write and read text file.‘

import makeTextFile

import readTextFile

if __name__ == ‘__main__‘:

    #wrie file

    filename = makeTextFile.write_file()

    #read file

    readTextFile.read_file(filename)

 一下為筆者自己所寫:

#! /usr/bin/Python2.7

‘makeTextFile2--create text file‘

   ls = os.linesep

   #get  

   fileName = raw_input(‘plz input filename:‘)

   while True:

       if os.path.exists(fileName)     

           print(‘file already exists!‘)

       else:

           fileName = raw_input(‘plz input  :‘)

   #get content in line

   all = []

   print(‘\nEnter line(‘.‘ to quit).\n‘)

       entry =  (‘>‘)

       entry.append( )

   fobj = open(fileName,  ‘)

   fileName.writelines(‘%s%s‘ %(x, ls) for x in  )

fobj.  ()

‘readTextFile2--read text file‘

def read_ ():

   try:

       fobj = open(fileName, ‘r‘)

   except IOError as err:

       print (‘read file error:{0}‘.format(err))

   else:

       for eachLine in fobj:

           print(eachLine)

       fobj.close()

‘main2—main function’

import makeTextFile. 

import readTextFile.py

fileName = makeTextFile.write_file()

readTextFile.read_file(fileName)

 注釋寫明白,是fileName

 判斷完成之後應該立即提示輸入fileName

 如果之前沒有此file則建立,直接break

 改為raw_input

 If entry==’.’

                                                                           Break

明顯缺少語句

 完全瞎寫

 應該是将新的entry添加到all數組中

 缺少try except語句

 這裡是數組

 最後最好有個提示輸入完成,略顯程式完善

 因為下面要調用write_file,是以在函數最後要有一個return值

 因為需要使用别處傳來的參數,是以定義是需要參數fileName

 引用是不需要加字尾

 需要主函數

知識詳解及延伸:

這幾段程式中主要是學習了os.linesep的用法及讀寫文本文檔的方法,期間出現的問題總結及解釋如下:

問題1.os.linesep

os.linesep字元串給出目前平台使用的行終止符。例如,Windows使用‘\r\n‘,Linux使用‘\n‘而Mac使用‘\r‘。

例:  fileappend=open(‘/home/zll/new.txt‘,‘a‘)

  fileappend.write(‘zhui jia content‘)

  fileappend.write(‘\n‘) //不用\n 如果使用os.linesep

  while True:

     aline=raw_input("Enter a line(‘.‘ to quit):")

     if aline != ".":

       fileappend.write(‘%s%s‘ % (aline,os.linesep))

     else:

       break

  fileappend.close()

問題2.

fileName.writelines(‘%s%s‘ %(x, ls) for x in all)這裡應該用數組。

問題3.

如果本函數在其他函數中調用,需要用的傳回值的話,記得最後return。

問題4.

Import時不需要寫檔案字尾的

問題5.

主函數需要if __name__==’__main__’:的!!!