无法让Python识别字符串

时间:2017-08-23 22:29:33

标签: python-3.x

您好我正在学习Python, 我一直在尝试the "Count Green Eggs and Ham" project

我遇到的问题是我无法让程序识别 Sam-i-am 并将其替换为 Sam-I-am

到目前为止我所做的是(忽略评论):

f = open('green_eggs_and_ham_text_with_errors.txt')
g = open('greeneggsandhamfixed.txt', 'w')


def CapitalEye(a):
        lstitm = list(a)
        a=''
        for ind, ltr in enumerate(lstitm):
            if ltr == 'i':
                lstitm[ind] = 'I'
            for i in lstitm:
                a += i
for line in f:
    splt = line.split(' ')

    for i, itm in enumerate(splt):
        if itm == 'i':
            splt[i]='I'
        elif itm == 'Sam-i-am':
            CapitalEye(itm)
            splt[i]=itm
        elif itm == 'Sam-i-am!':
            CapitalEye(itm)
            splt[i]=itm
        elif itm == 'Sam-i-am.':
            CapitalEye(itm)
            splt[i]=itm
        elif itm == 'Sam-i-am?':
            CapitalEye(itm)
            splt[i]=itm
        elif itm == 'Sam-i-am,':
            CapitalEye(itm)
            splt[i]=itm
    #print(splt)
    print(' '.join(splt))
    #splt = ' '.join(splt)        
    #g.write(splt)
#g.close()
#f.close()

3 个答案:

答案 0 :(得分:1)

尝试使用替换方法

drop table emp purge;
drop table dept purge;
CREATE TABLE dept
(
    deptno    INTEGER PRIMARY KEY
);

CREATE TABLE emp
(
    empno NUMBER (4, 0)
  , ename VARCHAR2 (10)
  , job VARCHAR2 (9)
  , mgr NUMBER (4, 0)
  , hiredate DATE
  , sal NUMBER (7, 2)
  , comm NUMBER (7, 2)
  , deptno NUMBER (2, 0)
  , CONSTRAINT pk_emp PRIMARY KEY (empno)
  , CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES dept (deptno)
);

CREATE or replace PACKAGE emp_pkg
AS
    TYPE name_array_t IS TABLE OF emp.ename%TYPE
        INDEX BY BINARY_INTEGER;

    FUNCTION upd (p_empno IN emp.empno%TYPE)
        RETURN name_array_t;

    PROCEDURE upd (
        p_empno   IN     emp.empno%TYPE
      , p_names      OUT name_array_t
    );
END emp_pkg;

CREATE or replace PACKAGE BODY emp_pkg
AS
    FUNCTION upd (p_empno IN emp.empno%TYPE)
        RETURN name_array_t
    AS
        l_names   name_array_t;
    BEGIN
           UPDATE emp
              SET empno   = empno
            WHERE deptno = 20
        RETURNING ename
             BULK COLLECT INTO l_names;

        RETURN l_names;
    END upd;

    PROCEDURE upd (
        p_empno   IN     emp.empno%TYPE
      , p_names      OUT name_array_t
    )
    AS
    BEGIN
        p_names   := upd (p_empno);
    END upd;
END emp_pkg;

答案 1 :(得分:0)

有一些事情使得这比必要的更难。
我建议尝试搜索所有的实例
i(我之后的空间)

-i-

def CapitalEye(a):
    a = a.replace('i ', 'I ')
    a = a.replace('-i-', '-I-')
    return a

输入a将是文本文件,在这种情况下,我只是使用原始文本

CapitalEye("""
    i am Sam
    Sam i am

    That Sam-i-am!
    That Sam-i-am!
    i do not like that Sam-i-am!
    ...
""")

<小时/>

如何写入文件

模式

您需要包含一个mode参数,以指定您是在读取还是写入文件。这里有一些可用的模式 模式是:

  • 'r' - 仅在读取文件时使用的读取模式
  • 'w' - 用于编辑和向文件写入新信息的写入模式(激活此模式时,将删除任何具有相同名称的现有文件)
  • 'a' - 附加模式,用于将新数据添加到文件末尾;这是新信息自动修改到最后
  • 'r +' - 特殊读写模式,用于处理文件时的两种操作
    def CapitalEye(a):
        a = a.replace('i ', 'I ')
        a = a.replace('-i-', '-I-')
        return a


    # write file to variable
    file1 = open("testfile.txt", "r")
    file2 = open("testfile2.txt", "w")
    file2.write(CapitalEye(file1.read()))

答案 2 :(得分:0)

正则表达式非常适合这种类型的东西

import re

a = "sam-i-am"
b = "so i was going to go to see her but i didn't"

re.sub("-i-","-I-", a)

sam-I-am

#use [^a-z] to match only non a-z characters on both sides (i.e. spaces/punctuation)

re.sub("[^a-z]i[^a-z]"," I ", b)

so I was going to go to see her but I didn't