首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的函数接受一个字符串作为参数,并以不同的格式打印。我想打开一个文件并在文件中的行上调用我的函数。

我的函数接受一个字符串作为参数,并以不同的格式打印。我想打开一个文件并在文件中的行上调用我的函数。
EN

Stack Overflow用户
提问于 2015-08-14 15:35:18
回答 2查看 85关注 0票数 1

例如,该函数目前正在工作,并将更改以下内容:

13126物理25000莎拉简史密斯

至:

史密斯,莎拉简13126物理25000

我试图使这个函数对外部文件中的文本行做同样的操作。外部文件中的行采用以下格式:

  • 12345 CSEE 35000巴特辛普森
  • 12346 CSEE 25000哈利波特
  • 12350经济学30000科鲁斯蒂小丑
  • 13123经济学55000大卫卡梅伦
  • 13124行话40000路易VanGaal
  • 13126物理25000莎拉简史密斯
  • 13127历史35000托尼布莱尔

我试图调用我的函数,以与上面的示例相同的方式格式化这些行。我的代码目前打印一个输出,但它完全不正确。

这是我的密码:

代码语言:javascript
复制
print""

# To God be the Glory


Payroll = []
Department = []
Salary = []
name1 = []
name2 = []
possiblename3 = []

print ""
String = raw_input("Please enter the lecturers details: ")


def printFormat(String):
    String = String.split()

    Payroll.append(String[0])
    Department.append(String[1])
    Salary.append(String[2])
    name1.append(String[3])
    name2.append(String[4])

    if len(String) == 6:
        possiblename3.append(String[5])

    print""    
    if possiblename3 != "":
        print "%s,%s %s      %s  %s     %s" % (','.join(possiblename3),', '.join(name1),', '.join(name2),', '.join(Payroll),', '.join(Department),', '.join(Salary))
    else:
        print "%s %s      %s  %s    %s" % (', '.join(name1),', '.join(name2),', '.join(Payroll),', '.join(Department),', '.join(Salary))

print printFormat(String)  

print ""
fname = input("Enter filename: ")

try :
 f = open(fname)
 myLine = f.readline()
 while (len(myLine)>0) :

 # print generates a newline so we do not want
 # the newline from the string


 print printFormat(myLine)
 myLine = f.readline()
 print ""
 #f.close()
 except IOError as e :
     print("Problem opening file")
EN

回答 2

Stack Overflow用户

发布于 2015-08-14 15:57:36

如果您只有5个或6个单词(取决于是否有中间名称),请将拆分字符串中的最后一个元素作为姓氏使用,即从元素3(即第一个名称切分到第二个单词)中使用,这样如果用户有中间名,您将得到一个单词或两个单词:

代码语言:javascript
复制
with open("in.txt") as f:
    for line in f:
        data = line.split()
        print("{},{} {}".format(data[-1]," ".join(data[3:-1])," ".join(data[:3])))

使用您的输入行,输出:

代码语言:javascript
复制
Simpson,Bart 12345 CSEE 35000
Potter,Harry 12346 CSEE 25000
Clown,Krusty The 12350 Economics 30000
Cameron,David 13123 Economics 55000
VanGaal,Louis 13124 Lingustics 40000
Smith,Sarah Jane 13126 Physics 25000
Blair,Tony 13127 History 35000

您还可以使用csv模块读取和拆分数据:

代码语言:javascript
复制
import csv
with open("in.txt") as f:
    r = csv.reader(f,delimiter=" ")
    for row in r:
        print("{},{} {}".format(row[-1]," ".join(row[3:-1])," ".join(row[:3])))

还可以使用NamedTemporaryFile和shutil.move将重新格式化的数据写入原始文件:

代码语言:javascript
复制
import csv
from tempfile import NamedTemporaryFile
from shutil import move

with open("in.txt") as f, NamedTemporaryFile(delete=False,dir=".") as out:
    wr = csv.writer(out)
    r = csv.reader(f,delimiter=" ")
    for row in r:
        wr.writerow(['{},{}'.format(row[-1], " ".join(row[3:-1]))," ".join(row[:3])])

之后的in.txt将类似于:

代码语言:javascript
复制
"Simpson,Bart",12345 CSEE 35000
"Potter,Harry",12346 CSEE 25000
"Clown,Krusty The",12350 Economics 30000
"Cameron,David",13123 Economics 55000
"VanGaal,Louis",13124 Lingustics 40000
"Smith,Sarah Jane",13126 Physics 25000
"Blair,Tony",13127 History 35000
票数 0
EN

Stack Overflow用户

发布于 2015-08-14 18:42:21

为您的功能尝试这个:

代码语言:javascript
复制
def printFormat(String):
  String = String.split()
  lastname = String[-1]
  firstnames = " ".join(String[3:-1])
  name = ", ".join([lastname, firstnames])

  otherstuff = " ".join(String[:3])
  return " ".join([name, otherstuff])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32013708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档