随机化多个文本文件并编译成一个

时间:2011-10-13 03:22:49

标签: text random

所以,我正在研究一个小小的想法,我错过了它的一部分。我不确定使用哪种编码语言,但我确信它可以做到最多,所以任何有你最喜欢的语言的经验,我都可以真正使用你的帮助!

在一个例子中,假设我有多个文本文件(它们是hundreads!),每个文本文件都有多行。我要做的是当我运行程序/脚本时,它会将所有文本文件编译成一个文本文件,但每次都是随机顺序。

谷歌并没有真正给我这个想法。所以非常感谢任何帮助!

编辑:

code-monkey的帮助下解决了问题。这是他的工作,有点改变它做我想要的。谢谢大家的帮助。 :)

import os
import random

os.chdir("C:/Users/USERACCOUNT/test/txtfiles")
directory = "C:/Users/USERACCOUNT/test/txtfiles"
extension = ".txt"
files = [file for file in os.listdir(directory) if file.lower().endswith(extension)]

file = open("C:/Users/USERACCOUNT/test/result.txt", "a")

random.shuffle(files)

for x in files:

    f = open(os.getcwd() + "\\" + x, "r")
    res = f.read()
    file.write(res + "\r\n")

f.close()
file.close()

3 个答案:

答案 0 :(得分:0)

我非常喜欢python这样的事情,这很容易。

这是一个例子:

import os
import random

files = os.listdir("C:\\Your\\Directory\\")

file = open("result.txt", "a")

random.shuffle(files)

for x in files:

    f = open(os.getcwd() + "\\" + x, "r")
    res = f.read()
    file.write(res + "\r\n")

f.close()
file.close()
希望有所帮助!

答案 1 :(得分:0)

像这样...... c#

static void ManyFilesToOne() {
        string dir = @"c:\miscworking\myfiles";
        FileInfo[] files = new DirectoryInfo(dir).GetFiles("*.txt");
        List<int> usedIdx = new List<int>();

        StringBuilder str = new StringBuilder();
        Random rnd = new Random();
        while (usedIdx.Count < files.Length) {

            int idx = rnd.Next(0, files.Length);
            while (usedIdx.FindIndex(delegate(int i) { return i == idx; }) >= 0) {
                idx = rnd.Next(0, files.Length);
                                }

            usedIdx.Add(idx);
            str.Append(File.ReadAllText(files[idx].FullName));
        }

        File.WriteAllText(Path.Combine(dir, @"File\BigFile" + rnd.Next(10000) + ".txt"), str.ToString() + System.Environment.NewLine);
    }

答案 2 :(得分:0)

Perl:

#!/usr/bin/env perl

use autodie;
use strict;
use warnings;

use File::Find;
use File::Slurp;
use List::Util qw( shuffle );

my $path = shift or die "Usage: $0 PATH\n";
open my $fh_output, '>', 'compiled.txt';

my @filenames;

sub compile {
    push @filenames, $File::Find::name unless -d;
}
find( \&compile, $path );

for my $filename ( shuffle @filenames ) {
    my $content = read_file $filename;
    print $fh_output $content if defined $content;
}

close $fh_output;