从非csv .text文件创建列表;根据可变条件输出到新的.text

时间:2014-03-18 14:08:36

标签: python list csv

我有两个快速python问题。这是我第一次使用python;我几乎没有任何编程经验所以我道歉 - 这是一个非常基本的问题,我知道它应该很容易。我确实搜索了现有的答案,却找不到任何有用的答案。

基本上,我有一个.txt文件,可以跟上31个变量。顶部有一个带有类别名称的标题,然后以下行只是条目。它看起来像这样:

date time parameter3 ... parameter31
 d1   t1   p3_1      ... p31_1
 d2   t2   p3_2      ... p31_2 

等。

除了参数6之外,所有参数都是数字的,参数6可以是三个字母的字符串,如果是空的,则为“......”

.txt文件不以逗号分隔;只有一到三个空格将每个值分开。

我正在尝试将此文本文件导入Python,从每行创建一个列表,然后让Python检查parameter7和parameter9。如果参数7 <30并且参数9 <35,我希望Python获取该条目并将其输出到新的.txt文件。如果这些条件中的任何一个不成立,我希望它忽略该特定行并继续前进。我该如何编写这样的程序?

这是我发现的唯一与我的问题相似的东西: How to Convert a Text File into a List in Python

但是,上面假设.txt文件已经以逗号分隔。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

使用line.split()以获取字段应该适合您。

例如:

def line_should_be_stored(fields):
    return int(fields[6]) < 30 and int(fields[8]) < 35

f_out = open('test.txt', 'wt') 
with open('test.txt', 'rt') as f_in:
    for line in f_in:
        fields = line.split();
        if line_should_be_stored(fields):
            f_out.write(line)
f_out.close()

答案 1 :(得分:0)

创建一个写方法:

def write_method(row)
    """
    Note this method will append to an exsisting file, 
    if you do not want that then remove conditional statement below and replace 
    'a' with 'w+' in the with statement.
    """
    if not os.path.isfile('somefile.txt'):
        with open('somefile.txt' 'w+')

    with open('somefile.txt', 'a') as the_file:
          the_file.write(row)

您提供的链接是正确的答案,您只需要替换:

for i in line.split(","):

for i in line.split("   "):

这会给你:

[&#34; d1&#34;,&#34; t1&#34;,&#34; p3_1&#34;,&#34; ...&#34;,&#34; p31_1&#34 ;,&#34; d2&#34;,&#34; t2&#34;,&#34; p3_2&#34;,&#34; ...&#34;,&#34; p31_2&#34;]

对于每一行而不是追加你可以抓住&#34;行[6]和行[8]&#34;

if line[6] is <30 and line[8] is <35:
    row.append(line)

如果您每次都需要新行上的行&#39; row.append(line)&#39;变成

row.append('%s\n' % line)

解析文件后,您可以将行传递给文件写入方法

 write_method(row)