Python 2.7 中的文件模式

File Modes in Python 2.7

我正在尝试制作数据库之类的东西,但我的 r+、w+ 和 a+ 不工作我必须关闭文件并以不同的模式再次打开以执行每个操作。这是有效的代码,但是当我只用一个文件对象和模式编写相同的代码时,如 r+ 或 w+ 或 rw+ 或 r+w 以及 r 和 a 的相同组合,它不会打印。它只写入文件但不打印行。

import os;
import sys;

def fileInput(numOfEmployees):
    for i in range(numOfEmployees):
        empId, empFName, empLName, empSalary,  empEmailId = raw_input("Enter employee id: "), raw_input("Enter employee first name: "), raw_input("Enter employee last name: "), raw_input("Enter employee salary: "), raw_input("Enter employee Email ID: ");
        string = empId+" "+empFName+" "+empLName+" "+empSalary+" "+empEmailId+"\n";
        fw.write(string);

def fileSearch(searchStr, fr):
    line = fr.readline();
    while line:
        empId, empFName, empLName, empSalary,  empEmailId = line.split();
        if(searchStr == empFName):
            print line;
        line = fr.readline();


def main():
    numOfEmployees = input("Enter the number of employees: ");
    fileInput(numOfEmployees);
    fw.close();
    searchStr = raw_input("Enter the name of the employee you want to search: ");
    fr = open(string, "r");
    fileSearch(searchStr, fr);
    fr.close();
try:
    string = os.path.dirname(os.path.realpath(__file__))+"/FileIO.txt";
    fw = open(string, "w");
    main();
except KeyboardInterrupt:
    fr.close();
    fw.close();
    sys.exit();

1) 如果您使用单个文件句柄(例如:fw 或 fr),请记住当您读取文件时,光标会向下移动到文件中。您必须 'scroll the cursor back' 到顶部(参见 seek

2) 'rw' 将覆盖之前的文件,从最后一个 运行 中删除之前的条目。使用 'a+'

试试这个:

import os;
import sys;

FileName='FileIO.txt'

def fileInput(fw,numOfEmployees):
    for i in range(numOfEmployees):
        empId, empFName, empLName, empSalary,  empEmailId = raw_input("Enter employee id: "), raw_input("Enter employee first name: "), raw_input("Enter employee last name: "), raw_input("Enter employee salary: "), raw_input("Enter employee Email ID: ");
        string = empId+" "+empFName+" "+empLName+" "+empSalary+" "+empEmailId+"\n";
        fw.write(string);

def fileSearch(fw, searchStr):
    line = fw.readline();
    while line:
        empId, empFName, empLName, empSalary,  empEmailId = line.split();
        if(searchStr == empFName):
            print line;
        line = fw.readline();


def main():

    string = os.path.dirname(os.path.realpath(__file__))+'/'+FileName;

    try:
        fw = open(string, "a+");
    except KeyboardInterrupt:
        sys.exit()

    numOfEmployees = input("Enter the number of employees: ");
    fileInput(fw,numOfEmployees);

    searchStr = raw_input("Enter the name of the employee you want to search: ");
    fw.seek(0)
    fileSearch(fw,searchStr);

    fw.close();

if __name__ == '__main__':
    main()