我想知道我是否有一个充满类似.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;
感谢您的帮助
答案 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]