Рандомизировать несколько текстовых файлов и скомпилировать в один - PullRequest
1 голос
/ 13 октября 2011

Итак, небольшая идея, над которой я работаю, и мне не хватает одной ее части.Я не уверен, на каком языке кодирования это сделать, но я уверен, что это можно сделать больше всего, поэтому любой, имеющий опыт работы с вашим любимым языком, действительно мог бы воспользоваться вашей помощью!

ВНапример, скажем, у меня есть несколько текстовых файлов (сотни из них!), каждый текстовый файл имеет несколько строк.Что я хочу сделать, так это когда я запускаю программу / скрипт, он скомпилирует все текстовые файлы в один текстовый файл, но каждый раз в случайном порядке.

Google действительно не давал мнечто-нибудь твердое в этой идее.Поэтому любая помощь очень ценится!

РЕДАКТИРОВАТЬ:

Проблема решена благодаря помощи 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 голосов
/ 13 октября 2011

как то так .. 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);
    }
0 голосов
/ 13 октября 2011

В 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;
0 голосов
/ 13 октября 2011

Мне действительно нравится 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()

надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...