2012-07-27 52 views
3

我想完成什么似乎是一个简单的任务,但我似乎无法弄清楚。我是一个Python新手。
迭代通过一个文本文件,并为每行python写一个新的文本文件

这是我的任务:
我有一个包含数字的列表的文本文件,每一个单独的行...

100101 
100201 
100301 
100401 
100501 
100601 
100701 
100801 
100901 
101001 

我想要做的是从文本阅读文件和写入包含线和使用线路也被命名文件中的每一行一个新的文本文件...

100101.txt 
contains one line of text "100101" 

100201.txt 
contains one line of text "100201" 

etc... 

希望这是有道理...谢谢!

hjnathan

+3

那你试试每个文件被关闭? – mgilson 2012-07-27 19:03:49

+4

这是功课吗? – Levon 2012-07-27 19:04:09

+0

删除了[解析]和[文本]标记,因为这不涉及解析,并且[文本]通常是一个相当无用的标记。 – geoffspear 2012-07-27 19:05:45

回答

6

试试这个:

with open('data.txt') as inf: 
    for line in inf: 
     num = line.strip() 
     if num: 
      fn = '%s.txt' %num 
      with open(fn, 'w') as outf: 
       outf.write('contains one line of text "%s"\n' %num) 

使用with结构可以确保当不需要的话不再(或如果发生异常)

+0

@joelCornett ..感谢编辑。我没有看到检查的必要性,因为OP表示每条线上都会有一个数字,但防御性编程没有问题:) – Levon 2012-07-27 19:26:44

+0

推断这一点很有意义。我只是想,因为OP是问一个非常基本的问题,这个问题很可能出现:) – 2012-07-27 19:30:27

+0

@JoelCornett不,你是对的,比对不起更安全。 – Levon 2012-07-27 19:31:11

2

注意下面的不检查具有相同名称的预先存在的文件。

with open('numbers_file.txt','r') as numbers: 
    for line in numbers: 
     with open(line.rstrip() + '.txt','w') as new_file: 
      new_file.write(line) 
+0

为什么'str(line)'而不是'line'? – mgilson 2012-07-27 19:09:50

+0

良好的通话。我正在注意。刚刚测试过,它的工作。 – aaronlevin 2012-07-27 19:11:58

3

编辑:使用with使执行更安全。

lines = open(your_file, 'r') 
for line in lines.readlines(): 
    with open(str(line).rstrip()+'.txt','w') as output_file 
     output_file.write(line) 
lines.close() 
+0

你可能应该放入'output_file.close()'。依靠垃圾收集器来关闭文件并释放这些资源不被认为是好的做法。 (而在你的时候使用'lines.close()')。此外,这里不需要'readlines',''line in line''就可以正常工作。 – mgilson 2012-07-27 19:14:18

+1

这不涉及刷新缓冲区或关闭IO错误上的文件。 '打开(文件,模式)作为'构造是做这种IO的​​正确方式,因为它会自动处理所有这些东西。 – pR0Ps 2012-07-27 19:14:53

+0

文件模式'r'是否为默认保证行为? – 2012-07-27 19:18:19

相关问题