将文件存储为列表并在python中从中读取数据

时间:2017-11-13 16:54:28

标签: python list

我想知道我是否有一个充满类似.txt文件的目录,如果有办法将这些文件存储为python中的列表列表,则遍历列表以打开文件,然后迭代遍历中的对象实现某些目标的文件。例如:

ls /Path/to/directory/
1.txt 2.txt 3.txt 4.txt

每个文件的内容如下:

more 1.txt
1
2
3
4

对于python脚本,例如:

import os
pathname = os.path.join("directory",filenames)
for i in pathname:
    file_open = open(pathname[i])
    for j in file_open:
        file_sum = sum(int[j])
    return file_sum

或者用shell脚本单独运行python命令并将输出写入文件会更好吗?我只是想看看是否有一种很酷的pythonic方式来做到这一点。

#!/bin/bash

RUN_PATH=$1; shift
cd $RUN_PATH

for file in $RUN_PATH*
do
    MONEY=`basename $file`
    BAG=`python my_script.py $file`
    echo $MONEY "      " $BAG >> money_bag.txt
done;

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

是。我们可以使用glob(获取所有文本文件),短函数和字典理解的组合:

import glob


def sum_file(file_path):
    total = 0
    with open(file_path, 'r') as f:
        for line in f:
            try:
                total += int(line)
            except ValueError:
                continue
    return total


folder_location = r'path\to\directory\*.txt'

file_sums = {p: sum_file(p) 
             for p in glob.glob(folder_location)}

file_sums将是一个字典,其中键是每个文件的路径,值是可以在这些文件中解释为整数的所有行的总和。

答案 1 :(得分:0)

您可以尝试一行:

假设您现在已将所有文件名存储在一个列表中,并且每个文件都包含以下数字:

1.txt文件:

1
2
3
4

您可以尝试:

pathname = ['1.txt','2.txt','3.txt','4.txt']

print([sum([int(i) for i in open(i,'r+')]) for i in pathname])

输出:

[10, 14, 26, 30]