python - 测试文件中的每一行

标签 python file testing

我正在尝试编写一个 Python 程序来读取 infile 中的每一行。这个 infile 是一个日期列表。我想用函数 isValid() 测试每一行,如果日期有效则返回 true,否则返回 false。如果日期有效,则将其写入输出文件。如果不是,则将 invalid 写入输出文件。我有这个功能,我只想知道用这个功能测试每一行的最佳方法。我知道这应该通过循环来完成,我只是不确定如何设置循环来逐行测试文件中的每一行。

编辑:我现在有一个基本上可以工作的程序。但是,我得到的输出文件输出不正确。也许有人能够解释原因。

好的,我现在有了一个基本上可以运行的程序,但我在输出文件中得到了奇怪的结果。希望有 Python 3 经验的人可以提供帮助。

   def main():
datefile = input("Enter filename: ")
t = open(datefile, "r")
c = t.readlines()
ofile = input("Enter filename: ")
o = open(ofile, "w")



for line in c:
    b = line.split("/")
    e = b[0]
    f = b[1]
    g = b[2]

    text = str(e) + " " + str(f) + ", " + str(g)
    text2 = "The date " + text + " is invalid"

    if isValid(e,f,g) == True:
        o.write(text)

    else:
        o.write(text2)



def isValid(m, d, y):
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
    if d is range(1, 31):
        return True
elif m == 2:
    if d is range(1,28):
        return True
elif m == 4 or m == 6 or m == 9 or m == 11:
    if d is range(1,30):
        return True
else:
    return False

这是我得到的输出。

日期 1998 年 5 月 19 日 无效日期 7 21, 1984 无效日期 12 7, 1862 无效日期 2000 年 13 月 4 日 无效日期 11 40, 1460 无效日期 1970 年 5 月 7 日 无效日期 2001 年 8 月 31 日 无效日期 6 26, 1800 无效日期3 32、400 无效日期 1 1, 1111 无效

最佳答案

在最新版本的 Python 中,您可以使用文件隐含的上下文管理功能:

results = list()
with open(some_file) as f:
    for line in f:
        if isValid(line, date):
            results.append(line)

...或者更简洁的列表理解:

with open(some_file) as f:
    results = [line for line in f if isValid(line, date)]

对于越来越旧的 Python 版本,您可能需要显式打开和关闭文件(通过对文件进行简单的隐式迭代for line in file:)或对文件添加更显式的迭代(< em>f.readline() 或 f.readlines() (复数)取决于你是否想“啜饮”整个文件(与内存开销有关)或逐行迭代)。

另请注意,您可能希望从这些文件内容中去除尾随换行符(可能通过调用 line.rstrip('\n') --- 或者可能只是 line.strip () 如果您想消除每行中的所有前导和尾随空格)。

(根据对先前答案的附加评论进行编辑):

函数签名 isValid(m,d,y) 建议您将数据传递给此函数(月、日、年),但这没有意义,因为您必须此外,以某种方式传递要验证的数据(一行文本、一个字符串等)。

为了进一步帮助您,您必须提供更多信息(最好是该“isValid()”函数的来源或来源的相关部分。

在我最初的回答中,我假设您的“isValid()”函数只是在其单个参数中扫描任何有效日期。我修改了我的代码示例以显示如何将特定日期作为单个参数传递给使用此调用签名的函数:“isValid(somedata, some_date)。”

关于python - 测试文件中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868089/

相关文章:

python - Django 在不同的模型字段上保存图像

java - 计算文本文件中的行数、单词数和字符数

java - 如何在 Java 中首先编写测试?

java - Gradle:如何列出所有 "given tests"

python - 如何从每列中包含字典或列表的数据框中获取信息?

python - 为什么 locale.getpreferredencoding() 返回 'ANSI_X3.4-1968' 而不是 'UTF-8' ?

python - ctypes中的循环结构,python

linux - 使用bash将二进制文件转换为十进制格式,如何?

javascript - 使用 javascript 写入主机上的文本文件

testing - 字母数字会包含 _ 和空格吗?