我每天晚上都在处理一个大目录。每晚它会累积大约一百万个文件,其中一半.txt是我需要根据其内容移动到其他目录的文件。
每个.txt文件都是用管道分隔的,并且仅包含20条记录。记录6是包含我需要确定将文件移动到哪个目录的信息的记录。
记录示例:
A|CHNL_ID|4
Run Code Online (Sandbox Code Playgroud)
在这种情况下,文件将移至/out/4。
此脚本的处理速度为每小时80,000个文件。
关于如何加快速度有什么建议吗?
opendir(DIR, $dir) or die "$!\n";
while ( defined( my $txtFile = readdir DIR ) ) {
next if( $txtFile !~ /.txt$/ );
$cnt++;
local $/;
open my $fh, '<', $txtFile or die $!, $/;
my $data = <$fh>;
my ($channel) = $data =~ /A\|CHNL_ID\|(\d+)/i;
close($fh);
move ($txtFile, "$outDir/$channel") or die $!, $/;
}
closedir(DIR);
Run Code Online (Sandbox Code Playgroud) 我试图跳过前两行(从阅读3个文件)然后保存回来(我已经完成了这一切,剩下的就是跳线)
有没有办法做到这一点?
我确信它只是语法 - 我无法弄清楚为什么我的代码:
import os
from collections import Counter
d = {}
for filename in os.listdir('testfilefolder'):
f = open(filename,'r')
d = (f.read()).lower()
freqs = Counter(d)
print(freqs)
Run Code Online (Sandbox Code Playgroud)
将无法正常工作 - 它显然可以看到'testfilefolder'文件夹并告诉我该文件存在,即找不到错误消息'file2.txt'.所以它可以找到告诉我它没有找到...
然而,我得到这段代码:
from collections import Counter
d = {}
f = open("testfilefolder/file2.txt",'r')
d = (f.read()).lower()
freqs = Counter(d)
print(freqs)
Run Code Online (Sandbox Code Playgroud)
奖金 - 这是做我想做的事情的好方法(从文件中读取并计算单词的频率)?这是我使用Python的第一天(虽然我有一些编程exp.)
我不得不说我喜欢Python!
谢谢,
布赖恩
所以我使用文件打开提示来收集文件名.然后我在后台实例中打开此文件,将信息解析为字典并关闭文件.这很好用.这个代码是:
Application.FileDialog(msoFileDialogOpen).Show
sFullName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Run Code Online (Sandbox Code Playgroud)
如果用户按下取消,这显然是一个可行的方案,我收到以下错误:
Invalid procedure call or argument
Run Code Online (Sandbox Code Playgroud)
我试图将'gather'行更改为:
If Application.FileDialog(msoFileDialogOpen).SelectedItems(1) Then sFullName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Run Code Online (Sandbox Code Playgroud)
然而,这仍然会带来错误.即使禁用警报也会出现错误或"400".任何有关如何制作此弹出窗口或处理它的帮助将不胜感激.
我正在使用Data.Text.Lazy处理一些文本文件.我读了2个文件,并根据一些标准将文本分发到3个文件.执行处理的循环是go'.我已经设计了它应该以递增方式处理文件并且在内存中保持不变的方式.但是,一旦执行到达该go'部分,内存就会持续增加,直到最后达到大约90MB,从2MB开始.
有人可以解释为什么这种记忆增加发生以及如何避免它?
import qualified Data.Text.Lazy as T
import qualified Data.Text.Lazy.IO as TI
import System.IO
import System.Environment
import Control.Monad
main = do
[in_en, in_ar] <- getArgs
[h_en, h_ar] <- mapM (`openFile` ReadMode) [in_en, in_ar]
hSetEncoding h_en utf8
en_txt <- TI.hGetContents h_en
let len = length $ T.lines en_txt
len `seq` hClose h_en
h_en <- openFile in_en ReadMode
hs@[hO_lm, hO_en, hO_ar] <- mapM (`openFile` WriteMode) ["lm.txt", "tun_"++in_en, "tun_"++in_ar]
mapM_ (`hSetEncoding` utf8) [h_en, h_ar, hO_lm, hO_en, hO_ar] …Run Code Online (Sandbox Code Playgroud) 我需要获取一个文件并找到第一次出现的文字字符串模式作为文件的完整行:
Acknowledgments:
Run Code Online (Sandbox Code Playgroud)
然后我希望从匹配行一直到文件末尾创建一个新文件.
我希望perl是一个很好的方法来做到这一点,但我不是一个perl人,或者也许sed是一个好方法?
请提出一种在Unix中可靠地完成此操作的简单方法.
我在MATLAB中实现了代码,这些代码在包含数字数据和某些字符串的216x216矩阵上运行.我在这些矩阵上做的操作大多是像某个阈值以上的滤波器矩阵,找到高于某个值的所有矩阵索引,找到上面的值列表,然后找到它们之间的连续差异,一些字符串替换操作.做矩阵点产品等我需要访问数千个文件来生成这些矩阵(我在MATLAB中使用dlmread).
现在我需要用任何其他语言实现上述项目,这些语言通常与操作系统捆绑在一起,例如Perl,c或python或开源语言.
我做了一个简短的搜索,发现python是一个很好的研究工具.python是否具有一些用于矩阵运算的MATLAB等价物(比如将文件直接读入数组,查找,dlmwrite等)
因为我的代码已经有很多没有这些MATLAB函数的循环,所以代码会变得更加混乱和难以维护.
或者你能否指出任何其他选择.我熟悉小Perl但不熟悉python或R.
我试图将文件夹的名称附加到该文件夹中的所有文件名.我必须遍历包含子文件夹的父文件夹.我必须在Python中执行此操作,而不是bat文件.
例如,拿这些文件夹:
Parent Folder
Sub1
example01.txt
example01.jpg
example01.tif
Sub2
example01.txt
example01.jpg
example01.tif
Run Code Online (Sandbox Code Playgroud)
对此
Parent Folder
Sub1
Sub1_example01.txt
Sub1_example01.jpg
Sub1_example01.tif
Sub2
Sub2_example01.txt
Sub2_example01.jpg
Sub2_example01.tif
Run Code Online (Sandbox Code Playgroud)
我相信它的os.rename,但我无法解决如何调用文件夹名称.
感谢您的建议.
在我的Bash shell脚本中,我想从文件中读取一个特定的行; 由:每个部分分隔并将其分配给变量以便稍后处理.
例如,我想阅读第2行中找到的单词.文本文件:
abc:01APR91:1:50
Jim:02DEC99:2:3
banana:today:three:0
Run Code Online (Sandbox Code Playgroud)
一旦我"读取"第2行,我应该能够像这样回应这些值:
echo "$name";
echo "$date";
echo "$number";
echo "$age";
Run Code Online (Sandbox Code Playgroud)
输出将是:
Jim
02DEC99
2
3
Run Code Online (Sandbox Code Playgroud) 我想使用Win32 API删除INI文件中的部分以及键值.
有人能告诉我怎么办?