0

我浪费了很多时间试图找出问题,但没有运气。试过问我学校的助教,但他没用。我是初学者,我知道其中有很多错误,所以如果我能得到一些详细的解释,那就太好了。无论如何,基本上我想用以下功能做的是:

  • 使用 while 循环检查 random_string 是否在 TEXT 中,如果不是则返回 NoneType
  • 如果是,则使用 for 循环从该 TEXT 中读取行并将其放入列表 l1 中。
  • 然后,编写一个 if 语句来查看 random_string 是否在 l1 中。
  • 如果是,则进行一些计算。
  • 否则阅读下一行
  • 最后,将计算作为一个整体返回。

TEXT = open('randomfile.txt')

def random (TEXT, random_string):
    while random_string in TEXT:
        for lines in TEXT:
            l1=TEXT.readline().rsplit()
            if random_string in l1:
                '''
                    do some calculations
                '''
            else:
                TEXT.readline() #read next line???
        return #calculations
    return None
4

3 回答 3

1

也许?:

def my_func(ccy):
    with open('randomfile.txt', 'r') as f:
        l1 = [float(line.split()[-1]) for line in f.readlines() if ccy in line]
        if l1:
            return sum(l1) / len(l1)
        else:
            return None
于 2012-11-07T05:06:02.473 回答
1

假设计算是线的函数,则:

def my_func(fileobj,random_string,calculation_func):
    return [calculation_func(line) for line in fileobj if random_string in line] or None

否则,您可以这样做:

def my_func(fileobj,random_string):
    calculated = []
    for line in fileobj:
        if random_string in line:
            #do calculations, append to calculated
    return calculated or None

我省略了 while 循环,因为它会不必要地增加函数的复杂性。 fileobj假定一个类似文件的对象,例如缓冲区或类似的对象返回open

使用 while 循环编辑:

def my_func(fileobj,random_string):
    calculated = []
    try:
        while True: #remnant from competitive programming - makes it faster
            line = fileobj.readline()
            if random_string in line:
                #do calculations, append to calculated
    except EOFError:  #catches the error thrown when calling readline after file is empty.
        return calculated or None

编辑2 考虑到OP的新信息

def my_func(fileobj,random_string):
    total = 0
    number = 0
    try:
        while True:
            line = fileobj.readline()
            if random_string in line:
                total += float(line.split()[1])
                number += 1
    if total == number == 0:
        return 0 #or whatever default value if random_string isn't in the file
    return total/number

较短的版本:

def my_func(fileobj,random_string):
    results = [float(line.split()[1]) for line in fileobj if random_string in line]
    return sum(results)/len(results)
于 2012-11-07T05:14:29.250 回答
0

如果我能澄清您的要求:

  • 使用 while 循环检查是否random_string在文件中,如果没有则返回None
  • 收集random_string列表中的行。
  • 对收集的行进行一些计算并返回计算结果。

那么以下内容应该可以帮助您入门:

calculation_lines = []
random_string = 'needle'

with open('somefile.txt') as the_file:
   for line in the_file:
       if random_string in line:
           calculation_lines.append(line)

if not calculation_lines:
   return None # no lines matched

for i in calculation_lines:
    # do some calculations
    result_of_calculations = 42

return result_of_calculations
于 2012-11-07T07:33:18.880 回答