python 从文本中判断每行的类型输出到指定文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 从文本中判断每行的类型输出到指定文件相关的知识,希望对你有一定的参考价值。

文本内容:
[CAM01]
10
20
30
40
...
[F10]
1010
1020
1030

如果读取文本每一行,判断这一行是[CAM01]那么后边的行10 20 30三行 输出到[CAM01].TXT
如果这一行是[F10] 那么1010 1020 1030 这三行输出到[F10].txt中

求大师指点怎么写python这个脚本

我通常建议一开始就用面向对象的思维把事务模块化做好。所以先分析这个问题,抽象,比如你这个需求,其实是文件分隔,加上文本识别,还与文本序列的上下文有关,先写主程序,再分解实现好。
主程序是这样子,假设文本被读放一个lines的list里,主程序这么写
def main():
global last_context
for line in lines:
if is_conext(line):
keep_conext(line)
else:
save_to_file(last_context, line)
这就OK了。
下面再实现数据结构定义
global last_context
last_context=None
然后再实现两个函数
def keep_context(line):
global last_conext
last_conext=line[1:-1]
def is_conext(line):
return line.startswith("[")
def save_to_file(last_context,line):
try:
open(str(last_context)+“.txt","ab").write("%s\r\n"%line)
except:pass
这样会比较清晰。不容易写错程序,效率也高。也容易做测试。
参考技术A foo =
with open('test.txt') as fromFile:
toFileName = ''
for line in fromFile:
if(line[:1] == '['):
toFileName = line.strip('\n')
foo[toFileName]=[]
else:
foo[toFileName].append(line)
for a in foo:
with open(a+'.txt','a') as toFile:
for content in foo[a]:
toFile.write(content)

将这个作为一个python文件,双击它就可以运行了,注意那个test.txt文件(就是你要处理的那个文件)要和这个python文件放在同一个目录下。经测试我这里可以很好的运行,如果你运行过程中出现路径或者编码的问题,可以继续问。

Python - 从文本文件中读取逗号分隔值,然后将结果输出到文本文件[关闭]

【中文标题】Python - 从文本文件中读取逗号分隔值,然后将结果输出到文本文件[关闭]【英文标题】:How to read comma separated values from a text file, then output result to a text file? [closed] 【发布时间】:2014-03-11 18:35:08 【问题描述】:

基本上我需要创建一个程序,该程序将添加从以逗号分隔的文本文件中读取的数字。即

文件.txt

1,2,3

4,5,6

7,8,9

到目前为止,我有简单的代码

x = 1
y = 2
z = 3

sum=x+y+z

print(sum)

我不确定如何将文本文件中的每个数字分配给 x,y,z。

我想要的是它会遍历文本文件中的每一行,这将是一个简单的循环。

但是我也不知道如何将结果输出到另一个文本文件。 即answers.txt

6

15

24

非常感谢。

【问题讨论】:

所以您似乎正在寻找可以读取 CSV 并计算总和的代码? 【参考方案1】:

欢迎来到 ***!

你的想法是对的,让我们从打开一些文件开始吧。

with open("text.txt", "r") as filestream:
    with open("answers.txt", "w") as filestreamtwo:

在这里,我们打开了两个文件流“text.txt”和“answers.txt”。

由于我们使用了“with”,这些文件流将在其下方的空白代码运行完毕后自动关闭。

现在,让我们逐行浏览文件“text.txt”。

for line in filestream:

这将运行一个 for 循环并在文件末尾结束。

接下来,我们需要将输入文本更改为我们可以使用的东西,例如数组!

currentline = line.split(",")

现在,“currentline”包含“text.txt”第一行中列出的所有整数。

让我们把这些整数加起来。

total = str(int(currentline[0]) + int(currentline[1]) + int(currentline [2])) + "\n"

我们必须将 int 函数包裹在“currentline”数组中的每个元素周围。否则,我们将连接字符串,而不是添加整数!

之后,我们添加回车“\n”,以使“answers.txt”更清晰易懂。

filestreamtwo.write(total)

现在,我们正在写入文件“answers.txt”...就是这样!大功告成!

这里又是代码:

with open("test.txt", "r") as filestream:
    with open("answers.txt", "w") as filestreamtwo:
        for line in filestream:
            currentline = line.split(",")
            total = str(int(currentline[0]) + int(currentline[1]) + int(currentline [2])) + "\n"
            filestreamtwo.write(total)

【讨论】:

嗨,为什么这个答案是错误的? 因为您的代码不好而被否决。忽略有一个csv 模块可以为您完成大部分工作这一事实,您使用while 来迭代文件而不是for line in file,您没有使用with 语句文件处理,一般来说你似乎不太了解python。一般来说,这段代码并没有教导人们应该使用的正确习语。感觉就像你更习惯了java 或其他 c 风格的语言,只是在 python 中应用该语言的概念,那里有更好的方法。 您好 l4mpi,感谢您的回复,OP 表示他们希望以 .txt 格式输出文件,因此我避免使用 csv。我忘记了“for line in file”,现在我将用它来修改我的答案。我不熟悉“with”,您能否举例说明如何使用“with”打开文件流,因为我在网上找到的回复对我来说非常复杂。我只使用过python,正如你所说,不是很好。我最初是来***学习java的,但我想我最好还是多花点时间在/python上! 你似乎很困惑——一个csv文件只是一个普通的文本文件,你可以用任何你想要的结尾保存它,包括.txt。至于文件上下文中的 with 语句,你做with open("myfile.txt") as f,然后可以在 with 语句的块中使用文件对象;阻塞后会自动关闭。有关示例,请参见其他答案。 也许@EducateMe 没有写出最好的代码,但他的耐心和解释对于想要学习的初学者来说似乎很棒,我们需要这样有耐心的教育者。【参考方案2】:

您可以用更少的行来完成此操作,但我希望您发现此解决方案可读且易于理解:

out = file('answers.txt', 'w')
for line in file('file.txt', 'r'):
    s = 0
    for num in line.strip().split(','):
        s += int(num)
    out.write("%d\n" % s)

【讨论】:

【参考方案3】:

对于此任务,您可能不想直接处理程序中的文件,而是处理标准输入(Python 2 中的input()raw_input())和标准输出(仅print())。

然后在调用脚本时指定输入和输出文件名:

python script.py < file.txt > answer.txt

使用此方案,您可以拥有这样的程序(Python 2.7):

while (True):
    try:
        x, y, z = [int(val) for val in raw_input().split(',')]
        print (x + y + z)
    except EOFError:
        pass

【讨论】:

【参考方案4】:

想知道文件是否只有逗号分隔值,那么为什么不将文件保存为“.csv”格式。如果可以的话:

您始终可以使用 csv 阅读器来读取文档中提到的任何 CSV 文件:http://docs.python.org/2/library/csv.html

您的场景的快速示例:

with open('test.csv','rb') as csvfile:
    csvreader = csv.reader(csvfile)
    output_fil = open('output.txt', 'ab')
    for row in csvreader:
        result = 0
        for elem in row:
            result = result + int(elem)
        print result
        output_fil.writelines(str(result))

其中 text.csv 将包含如下输入:

1,2,3
4,5,6
...

并且 output.txt 应包含:

6
15
..

【讨论】:

【参考方案5】:
INFILE = "input.csv"
OUTFILE = "my.txt"

def row_sum(row, delim=","):
    try:
        return sum(int(i) for i in row.split(delim))
    except ValueError:
        return ""

with open(INFILE) as inf, open(OUTFILE, "w") as outf:
    outf.write("\n".join(str(row_sum(row)) for row in inf))

【讨论】:

【参考方案6】:
with open("file2.txt","w") as f:
    print >> f,"\n".join(map(lambda x:str(sum(int(y) for y in x.split(","))),open("file1.txt")))

【讨论】:

这既不是代码也不是高尔夫的答案。投反对票,因为我认为您的回答没有帮助,尤其是对新程序员而言。 我毫不费力地要求代码,我会打高尔夫球...在我看来,他写问题的时间比写代码的时间要多...

以上是关于python 从文本中判断每行的类型输出到指定文件的主要内容,如果未能解决你的问题,请参考以下文章

批处理如何提取文本文件中每行字符串,每行单独存放不同文本中?

delphi中怎么逐行读取文本文件的数据并将每行分别写入指定的不同编辑框

python将指定文本中的字符串替换后,生成新的文本文件。

如何从python中的文本文件中获取所有3克?

python如何从文本中筛选出带指定汉字的句子

python中判断变量类型的函数